聲明:本文基本轉發與大神孫源的技術博客,不為盈利,不為騙贊,單純為自我留存,技術提升。文章最后附帶題目出處和答案出處。
出題者簡介: 孫源(sunnyxx),目前就職于百度,負責百度知道 iOS 客戶端的開發工作,對技術喜歡刨根問底和總結最佳實踐,熱愛分享和開源,維護一個叫 forkingdog 的開源小組。
答案者簡介:為微博@iOS程序犭袁整理,大神唐巧,資深iOS開發者和Blogger,曾開發有道云筆記、猿題庫和粉筆網的iOS客戶端。他維護著iOS開發博客 http://www.devtang.com/ 和微信 iOS開發公眾賬號 iosDevTips
1.風格糾錯題:
2. 什么情況使用 weak 關鍵字,相比 assign 有什么不同?
3.怎么用 copy 關鍵字?
4.這個寫法會出什么問題: @property (copy) NSMutableArray *array;
5.如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關鍵字的 setter?
6.@property 的本質是什么?ivar、getter、setter 是如何生成并添加到這個類中的
7.@protocol 和 category 中如何使用 @property
8.runtime 如何實現 weak 屬性
9.@property中有哪些屬性關鍵字?/ @property 后面可以有哪些修飾符?
10.weak屬性需要在dealloc中置nil么?
11.@synthesize和@dynamic分別有什么作用?
12.ARC下,不顯式指定任何屬性關鍵字時,默認的關鍵字都有哪些?
13.用@property聲明的NSString(或NSArray,NSDictionary)經常使用copy關鍵字,為什么?如果改用strong關鍵字,可能造成什么問題?對非集合類對象的copy操作 ? ?集合類對象的copy與mutableCopy
14.@synthesize合成實例變量的規則是什么?假如property名為foo,存在一個名為_foo的實例變量,那么還會自動合成新變量么?
15.在有了自動合成屬性實例變量之后,@synthesize還有哪些使用場景?
16.objc中向一個nil對象發送消息將會發生什么?
17.objc中向一個對象發送消息[obj foo]和objc_msgSend()函數之間有什么關系?
18.什么時候會報unrecognized selector的異常?
19.一個objc對象如何進行內存布局?(考慮有父類的情況)
20.一個objc對象的isa的指針指向什么?有什么作用?
21.下面的代碼輸出什么?
22. runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和實例方法)
23. 使用runtime Associate方法關聯的對象,需要在主對象dealloc的時候釋放么?
24. objc中的類方法和實例方法有什么本質區別和聯系?
25. _objc_msgForward函數是做什么的,直接調用它將會發生什么?
26. runtime如何實現weak變量的自動置nil?
27. 能否向編譯后得到的類中增加實例變量?能否向運行時創建的類中添加實例變量?為什么?
28. runloop和線程有什么關系?
29. runloop的mode作用是什么?
30. 以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫定回調,為什么?如何解決?
31. 猜想runloop內部是如何實現的?
32. objc使用什么機制管理對象內存?
33. ARC通過什么方式幫助開發者管理內存?
34. 不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創建)
35. BAD_ACCESS在什么情況下出現?
36. 蘋果是如何實現autoreleasepool的?
37. 使用block時什么情況會發生引用循環,如何解決?
38. 在block內如何修改block外部變量?
39. 使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環問題?
40. GCD的隊列(dispatch_queue_t)分哪兩種類型?
41. 如何用GCD同步若干個異步調用?(如根據若干個url異步加載多張圖片,然后在都下載完成后合成一張整圖)
42. dispatch_barrier_async的作用是什么?
43. 蘋果為什么要廢棄dispatch_get_current_queue?
44. 以下代碼運行結果如何?
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}
45. addObserver:forKeyPath:options:context:各個參數的作用分別是什么,observer中需要實現哪個方法才能獲得KVO回調?
46. 如何手動觸發一個value的KVO
47. 若一個類有實例變量NSString *_foo,調用setValue:forKey:時,可以以foo還是_foo作為key?
48. KVC的keyPath中的集合運算符如何使用?
49. KVC和KVO的keyPath一定是屬性么?
50. 如何關閉默認的KVO的默認實現,并進入自定義的KVO實現?
51. apple用什么方式實現對一個對象的KVO?
52. IBOutlet連出來的視圖屬性為什么可以被設置成weak?
53. IB中User Defined Runtime Attributes如何使用?
54. 如何調試BAD_ACCESS錯誤
55. lldb(gdb)常用的調試命令?
本文面試題全部出自孫大神 ?招聘一個靠譜的 iOS