### 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对象发送消息,将会发生什么? (返回值是对象,标量,结构体)