訪問某個對象中的私有變量,我現在知道有兩種,如有其它方法,希望大家多多指教(手動抱拳)
方法一:KVO
- 新建
model
類
01.png
- 在外部訪問私有變量
02.png
方法二:Runtime
首先導入
#import <objc/runtime.h>
通過C方法獲取對象的成員變量
class_getInstanceVariable(Class_Nullablecls,constchar*_Nonnullname)
參數分別是 被訪問的實例對象 對象的成員變量的名稱
- 給成員變量賦值
object_setIvar(id_Nullableobj, Ivar_Nonnullivar, id_Nullablevalue)
參數分別是 被訪問的實例對象 對象的成員變量的名稱 所需賦的值
- 讀取成員變量的值
object_getIvar(id_Nullableobj, Ivar_Nonnullivar)
參數分別是 被訪問的實例對象 對象的成員變量的名稱
03.png
- 遍歷出所有成員對象
unsigned int outCount = 0;
Ivar *ivars = class_copyIvarList([model class], &outCount);
// 遍歷所有成員變量
for (int i = 0; i < outCount; i++) {
// 取出i位置對應的成員變量
Ivar ivar = ivars[I];
NSString *objc_type = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivar)];
Class class = NSClassFromString(objc_type);
if ([class isKindOfClass:[NSString class]]) {
//TODO
}
const char *name = ivar_getName(ivar);
const char *type = ivar_getTypeEncoding(ivar);
NSLog(@"成員變量名:%s 成員變量類型:%s",name,type);
}
// 注意釋放內存砂轻!
free(ivars);