iOS精華面試題

聲明:本文基本轉(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

附錄:答案大全出自唐大神 ?參考答案(上)And?參考答案(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容