上一篇文章中我们是通过KVO的方式访问对象的私有属性,此篇通过runtime的方式访问。
1、首先导入<objc/runtime.h>。
2、通过C方法获取对象的成员变量(ivar)class_getInstanceVariable(Class_Nullablecls,constchar*_Nonnullname);
两个参数依次:1:被访问的实例对象, 2:被访问实例对象的成员变量名(_属性名 eg:_name);
3、给成员变量设值:object_setIvar(id_Nullableobj, Ivar_Nonnullivar, id_Nullablevalue) ;
三个参数依次:1:被访问的实例对象, 2:被访问实例对象的成员变量名,3:所需赋的值。
4、读取属性的值:object_getIvar(id_Nullableobj, Ivar_Nonnullivar) ;
两个参数依次:1:被访问的实例对象, 2:被访问实例对象的成员变量,即:第二步得到的ivar。
以上四部就完成了对私有属性的访问。
注意:此处的object_getIvar和object_setIvar必须一致,不可与KVC混合使用,切忌切忌。
代码示例:(WYPerson是Person的子类)
网友评论