上一篇文章中我們是通過KVO的方式訪問對(duì)象的私有屬性,此篇通過runtime的方式訪問。
1、首先導(dǎo)入<objc/runtime.h>。
2、通過C方法獲取對(duì)象的成員變量(ivar)class_getInstanceVariable(Class_Nullablecls,constchar*_Nonnullname);
兩個(gè)參數(shù)依次:1:被訪問的實(shí)例對(duì)象, 2:被訪問實(shí)例對(duì)象的成員變量名(_屬性名 eg:_name);
3、給成員變量設(shè)值:object_setIvar(id_Nullableobj, Ivar_Nonnullivar, id_Nullablevalue) ;
三個(gè)參數(shù)依次:1:被訪問的實(shí)例對(duì)象,?2:被訪問實(shí)例對(duì)象的成員變量名,3:所需賦的值。
4、讀取屬性的值:object_getIvar(id_Nullableobj, Ivar_Nonnullivar) ;
兩個(gè)參數(shù)依次:1:被訪問的實(shí)例對(duì)象, 2:被訪問實(shí)例對(duì)象的成員變量,即:第二步得到的ivar。
以上四部就完成了對(duì)私有屬性的訪問。
注意:此處的object_getIvar和object_setIvar必須一致,不可與KVC混合使用。
代碼示例:(WYPerson是Person的子類)


