我一直试图从NSObject
协议中获取属性列表,但我遇到了一些麻烦。
使用以下代码似乎不断返回该协议的属性列表中的nil。
Protocol *protocol = objc_getProtocol("NSObject");
NSLog(@"%s", protocol_getName(protocol)); // confirms that NSObject protocol is found
unsigned count;
objc_property_t *properties = protocol_copyPropertyList(protocol, &count);
for (NSUInteger index = 0; index < count; index++) {
NSString *key = [NSString stringWithUTF8String:property_getName(properties[index])];
[propertiesArray addObject:key];
}
free(properties);
NSLog(@"%@",propertiesArray); // prints empty array
大家都应该这样做。我甚至创建了自己的协议并使用它代替NSObject
,它工作正常。
@protocol TestProtocol
@property NSString *someSortOfProperty;
@end
与上面相同的代码只更改了协议的名称,返回someSortOfProperty
属性。
Protocol *protocol = objc_getProtocol("TestProtocol");
NSLog(@"%s", protocol_getName(protocol)); // confirms that TestProtocol protocol is found
unsigned count;
objc_property_t *properties = protocol_copyPropertyList(protocol, &count);
for (NSUInteger index = 0; index < count; index++) {
NSString *key = [NSString stringWithUTF8String:property_getName(properties[index])];
[propertiesArray addObject:key];
}
free(properties);
NSLog(@"%@",propertiesArray); // prints [85711:303] ( someSortOfProperty )
如果你们中的任何一个人过去成功地做过这件事,或者可以发现一些我做错了的事情会很棒。