RunTime的具体应用:
- 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)
- 给分类添加属性
- KVC
- 消息转发机制
- 动态交换方法的实现
- 手动实现多继承(oc本身是不支持多继承的)
- aspect 切面编程
0. 具体应用拦截系统自带的方法调用(Method Swizzling黑魔法)
Method Swizzling
是改变一个已存在的selector
的实现的技术。可以使用它来在Runtime
通过修改类的分发表中selector
对应的函数,来修改selector
的实现。
我们常用Method Swizzling
来将系统的方法换为我们自定义的方法,给系统方法添加一些需要的功能,来实现某些需求。例如,跟踪程序每个ViewController
展示给用户的次数,可以通过Method Swizzling
替换ViewDidAppear
初始方法。再例如更换全局UILabel
默认字体,可以通过Method Swizzling
替换UILabel
初始方法来修改等。
1.给分类添加属性 AssociatedObject
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
object:需要设置关联对象的对象
key:关联对象的key,推荐使用selector
value:关联对象的值,id类型
policy:关联对象的策略,属性可以根据定义在枚举类型objc_AssociationPolicy上的行为被关联在对象上。类似于@property创建时设置的关键字。
objc_getAssociatedObject
获取关联对象
id objc_getAssociatedObject(id object, const void *key)
objc_removeAssociatedObjects
移除某个对象的所有关联对象,此方法不常用。
通过提供的方法我们就可以对存在的类在拓展中添加自定义的属性了。
网友评论