應(yīng)用場景:筆者在開發(fā)時遇到的一個問題埃儿,就是用戶登錄時,一般會有很多用戶信息融涣,所以我在本地創(chuàng)建了一個userManager的單例童番,用來存儲用戶信息,當(dāng)用戶注銷時威鹿,因為userManeger是單例剃斧,如果把單例置空的話,會導(dǎo)致后面用不了忽你,所以我只能把單例的屬性一個個置空幼东,所以我就想到,能不能利用咱們強大的運行時,把類里所有的屬性置空筋粗。
其實代碼很簡單策橘,重要的是能運用到運行時,增強自己的知識娜亿。
先導(dǎo)入運行時所用到的頭文件:
#import <objc/message.h>//需要用到發(fā)送消息的時候丽已,設(shè)置函數(shù)的時候
#import <objc/runtime.h>//里面有一些特殊的函數(shù)
unsigned int ivarsCnt = 0;
// 獲取類成員變量列表,ivarsCnt為類成員數(shù)量
Ivar *ivars = class_copyIvarList([USUserManager class], &ivarsCnt);
// 遍歷成員變量列表买决,其中每個變量都是Ivar類型的結(jié)構(gòu)
for (int i = 0; i < ivarsCnt; i++) {
Ivar ivar = ivars[i];
object_setIvar([USUserManager sharedUserManager], ivar, nil);
}
其中
object_setIvar([USUserManager sharedUserManager], ivar, nil);的具體意思是什么呢沛婴?看下圖: