創建ID我正在使用的所有實例變量的列表如下:從伊瓦爾
Ivar *vars = class_copyIvarList([property class], &varCount);
我的問題是如何創建從伊瓦爾一個id?即恢復NSString或NSDictionary等。
創建ID我正在使用的所有實例變量的列表如下:從伊瓦爾
Ivar *vars = class_copyIvarList([property class], &varCount);
我的問題是如何創建從伊瓦爾一個id?即恢復NSString或NSDictionary等。
您只需使用object_getIvar()
函數。 事情是這樣的:
uint varCount;
Ivar *vars = class_copyIvarList([property class], &varCount);
// Get the first one (out of an instance of this class)
// Of course you could just iterate and get each one
id var = object_getIvar(property, vars[0]);
// Free the array when you're done
free(vars);
這個假設伊娃是類型(id)。請注意,object_getIvar()實際上已被棄用,因爲它實際上不適用於許多類型。 – bbum 2012-07-30 13:53:53
@bbum是的,這是正確的。我不知道,也看到喬納森的評論。感謝您的高舉。 – Alladinian 2012-07-30 13:58:02
這種方法可以簡化您的轉換代碼:
id obj = [p valueForKey:[NSString stringWithUTF8String:ivar_getName(anIvar)]];
...
這種方法比'object_getIvar()'方法允許更簡潔的代碼,因爲它會自動包裝其類型不是對象的ivars(例如,'int' ivar將被封裝在'NSNumber'中,'NSValue'中的'struct'等等 – 2012-07-30 12:41:31
的Objective-C的目的不是用這種活力的記在心裏。你想做什麼? – bbum 2012-07-30 13:54:10