聲明:本文基本轉(zhuǎn)發(fā)與大神孫源的技術(shù)博客,不為盈利,不為騙贊,單純?yōu)樽晕伊舸?,技術(shù)提升。文章最后附帶題目出處和答案出處。
出題者簡介: 孫源(sunnyxx),目前就職于百度,負責百度知道 iOS 客戶端的開發(fā)工作,對技術(shù)喜歡刨根問底和總結(jié)最佳實踐,熱愛分享和開源,維護一個叫 forkingdog 的開源小組。
答案者簡介:為微博@iOS程序犭袁整理,大神唐巧,資深iOS開發(fā)者和Blogger,曾開發(fā)有道云筆記、猿題庫和粉筆網(wǎng)的iOS客戶端。他維護著iOS開發(fā)博客 http://www.devtang.com/ 和微信 iOS開發(fā)公眾賬號 iosDevTips
1.風格糾錯題:

2. 什么情況使用 weak 關(guān)鍵字,相比 assign 有什么不同?
3.怎么用 copy 關(guān)鍵字?
4.這個寫法會出什么問題: @property (copy) NSMutableArray *array;
5.如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關(guān)鍵字的 setter?
6.@property 的本質(zhì)是什么?ivar、getter、setter 是如何生成并添加到這個類中的
7.@protocol 和 category 中如何使用 @property
8.runtime 如何實現(xiàn) weak 屬性
9.@property中有哪些屬性關(guān)鍵字?/ @property 后面可以有哪些修飾符?
10.weak屬性需要在dealloc中置nil么?
11.@synthesize和@dynamic分別有什么作用?
12.ARC下,不顯式指定任何屬性關(guān)鍵字時,默認的關(guān)鍵字都有哪些?
13.用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問題?對非集合類對象的copy操作 ? ?集合類對象的copy與mutableCopy
14.@synthesize合成實例變量的規(guī)則是什么?假如property名為foo,存在一個名為_foo的實例變量,那么還會自動合成新變量么?
15.在有了自動合成屬性實例變量之后,@synthesize還有哪些使用場景?
16.objc中向一個nil對象發(fā)送消息將會發(fā)生什么?
17.objc中向一個對象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關(guān)系?
18.什么時候會報unrecognized selector的異常?
19.一個objc對象如何進行內(nèi)存布局?(考慮有父類的情況)
20.一個objc對象的isa的指針指向什么?有什么作用?
21.下面的代碼輸出什么?

22. runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和實例方法)
23. 使用runtime Associate方法關(guān)聯(lián)的對象,需要在主對象dealloc的時候釋放么?
24. objc中的類方法和實例方法有什么本質(zhì)區(qū)別和聯(lián)系?
25. _objc_msgForward函數(shù)是做什么的,直接調(diào)用它將會發(fā)生什么?
26. runtime如何實現(xiàn)weak變量的自動置nil?
27. 能否向編譯后得到的類中增加實例變量?能否向運行時創(chuàng)建的類中添加實例變量?為什么?
28. runloop和線程有什么關(guān)系?
29. runloop的mode作用是什么?
30. 以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動頁面上的列表時,timer會暫定回調(diào),為什么?如何解決?
31. 猜想runloop內(nèi)部是如何實現(xiàn)的?
32. objc使用什么機制管理對象內(nèi)存?
33. ARC通過什么方式幫助開發(fā)者管理內(nèi)存?
34. 不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建)
35. BAD_ACCESS在什么情況下出現(xiàn)?
36. 蘋果是如何實現(xiàn)autoreleasepool的?
37. 使用block時什么情況會發(fā)生引用循環(huán),如何解決?
38. 在block內(nèi)如何修改block外部變量?
39. 使用系統(tǒng)的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環(huán)問題?
40. GCD的隊列(dispatch_queue_t)分哪兩種類型?
41. 如何用GCD同步若干個異步調(diào)用?(如根據(jù)若干個url異步加載多張圖片,然后在都下載完成后合成一張整圖)
42. dispatch_barrier_async的作用是什么?
43. 蘋果為什么要廢棄dispatch_get_current_queue?
44. 以下代碼運行結(jié)果如何?
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}
45. addObserver:forKeyPath:options:context:各個參數(shù)的作用分別是什么,observer中需要實現(xiàn)哪個方法才能獲得KVO回調(diào)?
46. 如何手動觸發(fā)一個value的KVO
47. 若一個類有實例變量NSString *_foo,調(diào)用setValue:forKey:時,可以以foo還是_foo作為key?
48. KVC的keyPath中的集合運算符如何使用?
49. KVC和KVO的keyPath一定是屬性么?
50. 如何關(guān)閉默認的KVO的默認實現(xiàn),并進入自定義的KVO實現(xiàn)?
51. apple用什么方式實現(xiàn)對一個對象的KVO?
52. IBOutlet連出來的視圖屬性為什么可以被設置成weak?
53. IB中User Defined Runtime Attributes如何使用?
54. 如何調(diào)試BAD_ACCESS錯誤
55. lldb(gdb)常用的調(diào)試命令?
本文面試題全部出自孫大神 ?招聘一個靠譜的 iOS