Objective-c runtime - 获取返回nil的NSObject协议的属性列表

时间:2014-11-20 00:42:03

标签: ios objective-c macos nsobject objective-c-runtime

我一直试图从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 )

如果你们中的任何一个人过去成功地做过这件事,或者可以发现一些我做错了的事情会很棒。

0 个答案:

没有答案