1

object-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 class] の代わりに object_getClass() の使用を検討してください。これはタスクによって異なります。解決する必要があります。

于 2013-05-10T09:38:12.307 に答える