1. runtime实现机制是什么,怎么用,一般用于干嘛?你还能记得使用的相关头文件或者某些方法的名称吗?
- 运行时机制,它是一套C语言库
- runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,动态改变类的方法实现,为类动态添加新的方法等
- 需要导入<objc/message.h><objc/runtime.h>
- 实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了结构体等数据类型,方法转成了C语言函数,平时调用的方法转成了
objc msgSend
函数(所以OC有个消息发送机制),因此可以说runtime是OC的底层实现和幕后执行者
2. KVO内部实现原理
- KVO是基于runtime机制实现的
- 当某个类的对象第一次被观察时,系统就会在运行期间,动态的创建一个该类的派生类,在这个派生类中重写基类中被观察属性的setter方法来实现真正的通知机制(Dog->NSKVONotifyingDog)
3. NSNotification和KVO的区别和用法是什么?怎么合理使用?在实现上有什么区别?如果用protocol和delegate来实现可能吗?会有什么潜在问题,为什么?
- 通知比较灵活(1个通知能被多个对象接收,1个对象能接收多个通知)
- 代理比较规范,但是代码多(默认是1对1)
- KVO性能不好(地城对动态的产生新类),只能监听某个对象属性的改变,不推荐使用(1个对象能被多个对象监听,1个对象能监听对个对象的其他属性)
更详细参考:http://blog.csdn.net/dqjyong/article/details/7685933
4. Block内部实现原理
Objective-C是对C语言的扩展,block的实现是基于指针和函数指针