簡體   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