我在objective-c中有一些属性被声明为只读,例如:
@property (nonatomic, readonly) NSString* aProperty;
而且我想获得有关属性可读性的信息以区别对待它们(例如,更改有关它们的信息在 GUI 中的显示方式)。这就是为什么我需要一种方法来询问该属性是否是只读的(我有一个属性名称列表及其包含它们的对象)。有没有办法做到这一点?- 例如使用objective-c 运行时。
我在objective-c中有一些属性被声明为只读,例如:
@property (nonatomic, readonly) NSString* aProperty;
而且我想获得有关属性可读性的信息以区别对待它们(例如,更改有关它们的信息在 GUI 中的显示方式)。这就是为什么我需要一种方法来询问该属性是否是只读的(我有一个属性名称列表及其包含它们的对象)。有没有办法做到这一点?- 例如使用objective-c 运行时。
objc_property_t prop = class_getProperty([object class], [aProperty UTF8String]);
if (!prop) {
// doesn't exist for object
return nil;
}
const char * propAttr = property_getAttributes(prop);
NSString *propString = [NSString stringWithUTF8String:propAttr];
NSArray *attrArray = [propString componentsSeparatedByString:@","];
attrArray 将包含引用此Apple Doc的所有属性
为了让它变得简单快捷:
objc_property_t prop = class_getProperty([object class], "aProperty");
const char * roAttr *property_copyAttributeValue(property, "R");
我不相信,属性是使用 UTF8 编码的。;-) 但它不应该有任何区别。
这样,您不必构造许多 NSString 实例。
您不必选择所需的属性。
总是看看标题。它是文档的一部分。(property_copyAttribteValue() 仅记录在 runtime.h 中。)
考虑使用 object_getClass() 而不是 [object class]。这取决于任务,你必须解决。