0

この方法を作りました

-(NSMutableArray *)getProperties:(id)c
{
    NSString *propertyName;
    unsigned int outCount, i;
    NSMutableArray *propertieNames = [[NSMutableArray alloc] initWithObjects: nil];

    objc_property_t *properties = class_copyPropertyList(c, &outCount);
    for (i = 0; i < outCount; i++) {
        objc_property_t property = properties[i];
        propertyName = [NSString stringWithUTF8String:property_getName(property)];
        [propertieNames addObject:propertyName];
    }
    return propertieNames;
}

私はこれを使います

NSMutableArray *propertiesNames = [self getProperties:[self class]];

これを使いたい

NSMutableArray *propertiesNames = [[self class] getProperties];

クラス クラスにカテゴリを追加する方法。多分クラスクラスはオブジェクトではありません....

クラスにカテゴリを追加してみます

#import "Class+SN.h"

@implementation Class (SN)

@end

エラーが発生しました

Cannot find interface declaration for 'Class'
4

1 に答える 1

1

クラス メソッドが必要な場合は、+代わりにを使用する必要があり-ます。クラス メソッドでは、 はクラスを参照するため、 に置き換えることがselfできます。のドキュメントには、後でリストを解放する必要があると書かれています。そうしないと、メモリリークが発生します。cselfclass_copyPropertyListfree()

+ (NSArray *) getProperties
{
    NSString *propertyName;
    unsigned int outCount, i;
    NSMutableArray *propertyNames = [NSMutableArray array];

    objc_property_t *properties = class_copyPropertyList(self, &outCount);
    for (i = 0; i < outCount; i++)
    {
        objc_property_t property = properties[i];
        propertyName = [NSString stringWithUTF8String:property_getName(property)];
        [propertyNames addObject:propertyName];
    }

    free(properties);

    return propertyNames;
}

また、Objective-C のメソッド名で が使用されることはめったにありませんget。名前に が含まれるメソッドの多くgetは、出力パラメータがあること、または呼び出し元が独自のバッファを提供する必要があることを意味します (get名前で使用する場合の例についてはgetCharacters:range:、 および も参照してくださいgetStreamsToHost:port:inputStream:outputStream:)。この規則は、メソッドがより適切な名前propertiesなどになることを意味しますclassProperties

于 2013-01-16T04:45:40.123 に答える