runtime使用篇: object_setIvar

void object_setIvar(id obj, Ivar ivar, id value)

說明:該函數(shù)的作用是將實(shí)例obj的實(shí)例變量ivar賦值為value

最簡單的用法

使用object_setIvar 函數(shù),首先需要一個(gè) Ivar 參數(shù),那么現(xiàn)在先創(chuàng)建一個(gè)類 Person ,在 Person.m 文件中的擴(kuò)展(extension)里給該類添加一個(gè)私有屬性 childhoodName ,代碼示例如下:

@interface Person ()

/** 小名 */
@property (nonatomic, weak) NSString *childhoodName;

@end

@implementation Person

@end

回到 ViewController.m 文件,通過運(yùn)用這篇中的知識先獲取到一個(gè) Ivar ,代碼示例如下:

unsigned int count; // 1
Ivar *ivars = class_copyIvarList([Person class], &count); // 2
for (int i = 0; i < count; i++) { // 3
    Ivar ivar = ivars[i]; // 4
    NSLog(@"%s", ivar_getName(ivar)); // 5
} // 6

打印結(jié)果如下:

runtime[48515:4990027] _childhoodName

因此 Ivar 就自然地通過下列代碼得到了:

Ivar ivar = class_getInstanceVariable([Person class], "_childhoodName"); // 7

僅僅通過 alloc init 初始化的 Person 實(shí)例 p 并沒有給 _childhoodName 實(shí)例變量賦值『說明』,因此下列代碼執(zhí)行后打印結(jié)果為空

Person *p = [[Person alloc] init]; // 8
id name = object_getIvar(p, ivar); // 9
NSLog(@"%@", name); // 10

打印結(jié)果如下:

runtime[48515:4990027] (null)

現(xiàn)在 Ivar 參數(shù)有了,嘗試使用 object_setIvar 函數(shù)對 Ivar 賦值,并打印賦值后的 Ivar 的值:

object_setIvar(p, ivar, @"蘋果");
id newName = object_getIvar(p, ivar);
NSLog(@"%@", newName);

打印結(jié)果如下:

runtime[48515:4990027] 蘋果

『說明』:如果 Person 實(shí)例 p 剛初始化后就有值,上述方法同樣正常有效。

其他用法將在介紹 Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes) 函數(shù)的使用時(shí)進(jìn)行說明
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運(yùn)行時(shí)】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,804評論 7 64
  • 秋思 秋葉繽紛如彩蝶,伶仃藤蔓聽孤音。 風(fēng)吹曼舞候歸夢,來歲護(hù)花滿地春。
    烏子虛閱讀 303評論 2 4
  • 今年我有了一個(gè)新突破,就是將我一直專注實(shí)踐和研究的領(lǐng)域——如何挖掘天賦和構(gòu)建優(yōu)勢,做成了一門在線課程。這門課12月...
    話佳語閱讀 5,228評論 2 9
  • 葉小胖的微信表情鏈接,點(diǎn)我進(jìn)去看看吧! 微信:jashouhui 微信公眾號:葉小胖手繪漫畫
    葉小胖閱讀 270評論 2 1
  • 1 夏天伊始,我和安娜把輕薄的瑜伽墊搬到碼頭外的沙灘上,月亮很早就從潮聲中爬起來,海風(fēng)細(xì)軟,在腳趾縫間鉆來鉆去,像...
    午歌閱讀 1,055評論 2 6

友情鏈接更多精彩內(nèi)容