
这一步比较简单,就是找一个能实现该方法的对象,让这个对象去实现该方法;
就是利用runtime 遍历model实例对象的属性,然后通过KVC给这个属性赋值。
这里需要注意:添加的属性不是真正这个属性。而是关联对象。
真正添加属性如下:
添加属性需要在实例化之后,注册之前添加,即在 方法和 之间添加。如果在$\color{red}{objc_registerClassPair}之后添加无效。还可能崩溃。这里涉及到OC中类的成员变量的偏移量, 如果在类注册之后再addIvar的话会破坏原来类成员变量正确的偏移量, 这样的话会导致你访问的那个成员变量并不是你想访问的成员变量
详情请点击 埋点专题
以上说的是 ,而KVO则是 的一种运用
kvo底层也是通过runtime来实现的,当某个对象设置kvo时,runtime会在运行时,动态的创建该类的子类,并重写set方法,当set方法调用时,会通知观测者;
先创建一个子类,重写其set方法,然后修改对象的isa指针,指向子类
此文我是搬运工
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)