iOS:RunTime基本使用与实际运用

iOS:RunTime基本使用与实际运用,第1张

下面我们来看看它的常用方法,前提引入头文件 #,再去 这个字段设置为 NO(默认为YES),防止编译器校验语法。

这一步比较简单,就是找一个能实现该方法的对象,让这个对象去实现该方法;

就是利用runtime 遍历model实例对象的属性,然后通过KVC给这个属性赋值。

这里需要注意:添加的属性不是真正这个属性。而是关联对象。

真正添加属性如下:

添加属性需要在实例化之后,注册之前添加,即在 方法和 之间添加。如果在$\color{red}{objc_registerClassPair}之后添加无效。还可能崩溃。这里涉及到OC中类的成员变量的偏移量, 如果在类注册之后再addIvar的话会破坏原来类成员变量正确的偏移量, 这样的话会导致你访问的那个成员变量并不是你想访问的成员变量

详情请点击 埋点专题

以上说的是 ,而KVO则是 的一种运用

kvo底层也是通过runtime来实现的,当某个对象设置kvo时,runtime会在运行时,动态的创建该类的子类,并重写set方法,当set方法调用时,会通知观测者;

先创建一个子类,重写其set方法,然后修改对象的isa指针,指向子类

此文我是搬运工

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7957716.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存