1

我在objective-c中有一些属性被声明为只读,例如:

@property (nonatomic, readonly) NSString* aProperty;

而且我想获得有关属性可读性的信息以区别对待它们(例如,更改有关它们的信息在 GUI 中的显示方式)。这就是为什么我需要一种方法来询问该属性是否是只读的(我有一个属性名称列表及其包含它们的对象)。有没有办法做到这一点?- 例如使用objective-c 运行时。

4

2 回答 2

1
    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的所有属性

于 2013-05-10T09:31:07.643 回答
1

为了让它变得简单快捷:

objc_property_t prop = class_getProperty([object class], "aProperty");
const char * roAttr *property_copyAttributeValue(property, "R");
  1. 我不相信,属性是使用 UTF8 编码的。;-) 但它不应该有任何区别。

  2. 这样,您不必构造许多 NSString 实例。

  3. 您不必选择所需的属性。

  4. 总是看看标题。它是文档的一部分。(property_copyAttribteValue() 仅记录在 runtime.h 中。)

  5. 考虑使用 object_getClass() 而不是 [object class]。这取决于任务,你必须解决。

于 2013-05-10T09:38:12.307 回答