技術(shù)基礎(chǔ)
1、為什么說Objective-C是一門動態(tài)的語言?
2、講一下MVC和MVVM,MVP?
3、為什么代理要用weak?代理的delegate和dataSource有什么區(qū)別?block和代理的區(qū)別?
4、屬性的實質(zhì)是什么?包括哪幾個部分?屬性默認(rèn)的關(guān)鍵字都有哪些?@dynamic關(guān)鍵字和@synthesize關(guān)鍵字是用來做什么的?
5、屬性的默認(rèn)關(guān)鍵字是什么?
6、NSString為什么要用copy關(guān)鍵字,如果用strong會有什么問題?(注意:這里沒有說用strong就一定不行。使用copy和strong是看情況而定的)
7、如何令自己所寫的對象具有拷貝功能?
8、可變集合類 和 不可變集合類的 copy 和 mutablecopy有什么區(qū)別?如果是集合是內(nèi)容復(fù)制的話,集合里面的元素也是內(nèi)容復(fù)制么?
9、為什么IBOutlet修飾的UIView也適用weak關(guān)鍵字?
10、nonatomic和atomic的區(qū)別?atomic是絕對的線程安全么?為什么?如果不是,那應(yīng)該如何實現(xiàn)?
11、UICollectionView自定義layout如何實現(xiàn)?
12、用StoryBoard開發(fā)界面有什么弊端?如何避免?
13、進(jìn)程和線程的區(qū)別?同步異步的區(qū)別?并行和并發(fā)的區(qū)別?
14、線程間通信?
15、GCD的一些常用的函數(shù)?(group,barrier,信號量,線程同步)
16、如何使用隊列來避免資源搶奪?
17、數(shù)據(jù)持久化的幾個方案(fmdb用沒用過)
18、說一下AppDelegate的幾個方法?從后臺到前臺調(diào)用了哪些方法?第一次啟動調(diào)用了哪些方法?從前臺到后臺調(diào)用了哪些方法?
19、NSCache優(yōu)于NSDictionary的幾點(diǎn)?
20、知不知道Designated Initializer?使用它的時候有什么需要注意的問題?
21、實現(xiàn)description方法能取到什么效果?
22、objc使用什么機(jī)制管理對象內(nèi)存?
中級Block
1、block的實質(zhì)是什么?一共有幾種block?都是什么情況下生成的?
2、為什么在默認(rèn)情況下無法修改被block捕獲的變量? __block都做了什么?
3、模擬一下循環(huán)引用的一個情況?block實現(xiàn)界面反向傳值如何實現(xiàn)?
Runtime
1、objc在向一個對象發(fā)送消息時,發(fā)生了什么?
2、什么時候會報unrecognized selector錯誤?iOS有哪些機(jī)制來避免走到這一步?
3、能否向編譯后得到的類中增加實例變量?能否向運(yùn)行時創(chuàng)建的類中添加實例變量?為什么?
4、runtime如何實現(xiàn)weak變量的自動置nil?
5、給類添加一個屬性后,在類結(jié)構(gòu)體里哪些元素會發(fā)生變化?
類結(jié)構(gòu)
1、isa指針?(對象的isa,類對象的isa,元類的isa都要說)
2、類方法和實例方法有什么區(qū)別?
3、介紹一下分類,能用分類做什么?內(nèi)部是如何實現(xiàn)的?它為什么會覆蓋掉原來的方法?
4、運(yùn)行時能增加成員變量么?能增加屬性么?如果能,如何增加?如果不能,為什么?
5、objc中向一個nil對象發(fā)送消息將會發(fā)生什么?(返回值是對象,是標(biāo)量,結(jié)構(gòu)體)
高級
1、UITableview的優(yōu)化方法(緩存高度,異步繪制,減少層級,hide,避免離屏渲染)
2、有沒有用過運(yùn)行時,用它都能做什么?(交換方法,創(chuàng)建類,給新創(chuàng)建的類增加方法,改變isa指針)
3、看過哪些第三方框架的源碼?都是如何實現(xiàn)的?(如果沒有,問一下多圖下載的設(shè)計)
4、SDWebImage的緩存策略?
5、AFN為什么添加一條常駐線程?
6、KVO的使用?實現(xiàn)原理?(為什么要創(chuàng)建子類來實現(xiàn))
7、KVC的使用?實現(xiàn)原理?(KVC拿到key以后,是如何賦值的?知不知道集合操作符,能不能訪問私有屬性,能不能直接訪問_ivar)
項目
1、有已經(jīng)上線的項目么?
2、項目里哪個部分是你完成的?(找一個亮點(diǎn)問一下如何實現(xiàn)的)
3、開發(fā)過程中遇到過什么困難,是如何解決的?
學(xué)習(xí)
1、遇到一個問題完全不能理解的時候,是如何幫助自己理解的?舉個例子?
2、有看書的習(xí)慣么?最近看的一本是什么書?有什么心得?
3、有沒有使用一些筆記軟件?會在多平臺同步以及多渠道采集么?(如果沒有,問一下是如何復(fù)習(xí)知識的)
4、有沒有使用清單類,日歷類的軟件?(如果沒有,問一下是如何安排,計劃任務(wù)的)