一份iOS面試題

技術(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ù)的)

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

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

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