2
有沒有辦法自動返回一個類的所有(公共)屬性的NSDictionary?你可以假定所有的屬性都是屬性列表,我不想只是將指針交給類本身。任何現有的魔法都可以解決這個問題?把所有的對象屬性放入一個NSDictionary或NSArray
我知道我可以懶惰實例化一個NSDictionary並手動使用getter中的屬性填充它。
有沒有辦法自動返回一個類的所有(公共)屬性的NSDictionary?你可以假定所有的屬性都是屬性列表,我不想只是將指針交給類本身。任何現有的魔法都可以解決這個問題?把所有的對象屬性放入一個NSDictionary或NSArray
我知道我可以懶惰實例化一個NSDictionary並手動使用getter中的屬性填充它。
使用Objective-C運行時中的class_copyPropertyList
和property_getName
函數很容易獲得一組已聲明的屬性。這裏有一個這樣的實現:
- (NSArray *)properties
{
NSMutableArray *propList = [NSMutableArray array];
unsigned int numProps = 0;
unsigned int i = 0;
objc_property_t *props = class_copyPropertyList([TestClass class], &numProps);
for (i = 0; i < numProps; i++) {
NSString *prop = [NSString stringWithUTF8String:property_getName(props[i])];
[propList addObject:prop];
}
return [[propList copy] autorelease];
}
您可以將此作爲方法添加到NSObject
的類別中。這是一個full code listing,可以編譯,演示這一點。
我不確定你是怎麼用NSDictionary
做的,只是因爲我不確定你期望的鍵值對是什麼。
請注意,如果屬性具有分配的自定義getter,則這不一定正常工作。您需要使用[property_getAttributes](http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101- SW6)查找每個屬性是否以及是什麼。 –
正是我在找什麼,例外的答案。謝謝。 – Patrick
類似的問題:http://stackoverflow.com/questions/754824/get-an-object-attributes-list-in-objective-c 也一定要導入objective-c運行時 #import –
Patrick