繁体   English   中英

获取有关是否在Objective-C中将属性设置为只读的信息的方法

[英]Way to get information on whether or not a property is set readonly in 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文档有关的属性

为了方便快捷:

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

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

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

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

  5. 考虑使用object_getClass()代替[object class]。 这取决于任务,您必须解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM