聲明:本文基本轉(zhuǎn)發(fā)與大神孫源的技術(shù)博客,不為盈利哈踱,不為騙贊荒适,單純?yōu)樽晕伊舸妫夹g(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找到對應(yīng)的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連出來的視圖屬性為什么可以被設(shè)置成weak?
53. IB中User Defined Runtime Attributes如何使用救鲤?
54. 如何調(diào)試BAD_ACCESS錯誤
55. lldb(gdb)常用的調(diào)試命令久窟?
本文面試題全部出自孫大神 ?招聘一個靠譜的 iOS