### iOS中級面試題
---
#### **Block**
##### 1. block的實質是什么?一共有幾種block? 都在什么情況下生成的?
##### 2. 為什么在默認的情況下無法修改被block捕獲的變量? _block都做了什么?
##### 3. 模擬一下循環引用的一個情況? block實現界面反向傳值如何實現?
#### **Runtime**
##### 1. objc在向一個對象發送消息時,發生了什么?
##### 2. 什么時候報unrecognized selectoe錯誤? iOS有哪些機制避免走到這一步?
##### 3. 能否向編譯后得到的類中增加實例變量? 能否向運行時創建的類中增加實例變量? 為什么?
##### 4. runtime如何實現weak變量的自動置nil?
##### 5. 給類添加一個屬性后,在類結構體里哪些元素會發生變化?
#### **RunLoop**
##### 1. runloop是來做什么的? runloop和線程有什么關系?主線程默認開啟了runloop么?子線程呢?
##### 2. runloop的mode是用來做什么的?有幾種mode?
##### 3. 為什么把NSTimer對象以NSDefaultRunLoopMode(KCFRunLoopDefaultMode)添加到主運行循環以后,滑動scrollview的時候NSTimer卻不動了?
##### 4. 蘋果是如何實現Autorelease Pool的?
#### **類結構**
##### 1. isa指針? (對象的isa,類對象的isa,元素的isa都要說)
##### 2. 類方法和實例方法有什么區別?
##### 3. 介紹一下分類, 能用分類做什么? 內部是如何實現的? 與該類原有方法的名稱相同的時候,為什么原有的方法會失效?
##### 4. 運行時能增加成員變量么? 能增加屬性么?如果能如何增加?如果不能,為什么?
##### 5. objc 中向一個nil對象發送消息,將會發生什么? (返回值是對象,標量,結構體)