在iOS開發的一篇推送中, 發現了好多面試題, 仔細看了看, 好多都答不上來, 先把這些記下來, 慢慢找到答案吧 ???♀?
技術
基礎
為什么說Objective-C是一門動態的語言?
講一下MVC和MVVM,MVP?
無意間看到了這一片文章 http://ios.jobbole.com/93091/ ?有空好好研究下.
為什么代理要用weak?代理的delegate和dataSource有什么區別?block和代理的區別?
屬性的實質是什么?包括哪幾個部分?屬性默認的關鍵字都有哪些?@dynamic關鍵字和@synthesize關鍵字是用來做什么的?
屬性的默認關鍵字是什么?
NSString為什么要用copy關鍵字,如果用strong會有什么問題?(注意:這里沒有說用strong就一定不行。使用copy和strong是看情況而定的)
如何令自己所寫的對象具有拷貝功能?
可變集合類 和 不可變集合類的 copy 和 mutablecopy有什么區別?如果是集合是內容復制的話,集合里面的元素也是內容復制么?
為什么IBOutlet修飾的UIView也適用weak關鍵字?
nonatomic和atomic的區別?atomic是絕對的線程安全么?為什么?如果不是,那應該如何實現?
UICollectionView自定義layout如何實現?
用StoryBoard開發界面有什么弊端?如何避免?
進程和線程的區別?同步異步的區別?并行和并發的區別?
線程間通信?
GCD的一些常用的函數?(group,barrier,信號量,線程同步)
如何使用隊列來避免資源搶奪?
數據持久化的幾個方案(fmdb用沒用過)
說一下AppDelegate的幾個方法?從后臺到前臺調用了哪些方法?第一次啟動調用了哪些方法?從前臺到后臺調用了哪些方法?
NSCache優于NSDictionary的幾點?
知不知道Designated Initializer?使用它的時候有什么需要注意的問題?
實現description方法能取到什么效果?
objc使用什么機制管理對象內存?
中級
Block
block的實質是什么?一共有幾種block?都是什么情況下生成的?
為什么在默認情況下無法修改被block捕獲的變量? __block都做了什么?
模擬一下循環引用的一個情況?block實現界面反向傳值如何實現?
Runtime
objc在向一個對象發送消息時,發生了什么?
什么時候會報unrecognized selector錯誤?iOS有哪些機制來避免走到這一步?
能否向編譯后得到的類中增加實例變量?能否向運行時創建的類中添加實例變量?為什么?
runtime如何實現weak變量的自動置nil?
給類添加一個屬性后,在類結構體里哪些元素會發生變化?
RunLoop
runloop是來做什么的?runloop和線程有什么關系?主線程默認開啟了runloop么?子線程呢?
runloop的mode是用來做什么的?有幾種mode?
為什么把NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環以后,滑動scrollview的時候NSTimer卻不動了?
蘋果是如何實現Autorelease Pool的?
類結構
isa指針?(對象的isa,類對象的isa,元類的isa都要說)
類方法和實例方法有什么區別?
介紹一下分類,能用分類做什么?內部是如何實現的?它為什么會覆蓋掉原來的方法?
運行時能增加成員變量么?能增加屬性么?如果能,如何增加?如果不能,為什么?
objc中向一個nil對象發送消息將會發生什么?(返回值是對象,是標量,結構體)
高級
UITableview的優化方法(緩存高度,異步繪制,減少層級,hide,避免離屏渲染)
有沒有用過運行時,用它都能做什么?(交換方法,創建類,給新創建的類增加方法,改變isa指針)
看過哪些第三方框架的源碼?都是如何實現的?(如果沒有,問一下多圖下載的設計)
SDWebImage的緩存策略?
AFN為什么添加一條常駐線程?
KVO的使用?實現原理?(為什么要創建子類來實現)
KVC的使用?實現原理?(KVC拿到key以后,是如何賦值的?知不知道集合操作符,能不能訪問私有屬性,能不能直接訪問_ivar)
項目
有已經上線的項目么?
項目里哪個部分是你完成的?(找一個亮點問一下如何實現的)
開發過程中遇到過什么困難,是如何解決的?