我想在Objective-c中向Class类添加类别

时间:2013-01-16 03:21:08

标签: objective-c

我制作了这个方法

-(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];

如何向Class类添加类别。也许Class类不是Object ....

我尝试将类别添加到Class

#import "Class+SN.h"

@implementation Class (SN)

@end

我收到了错误

Cannot find interface declaration for 'Class'

1 个答案:

答案 0 :(得分:1)

如果您需要类方法,则必须使用+而不是-。在类方法中,self引用了类,因此您可以将c替换为selfclass_copyPropertyList的文档说明您需要稍后使用free()释放列表,否则会泄漏内存。

+ (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:)。此约定意味着您的方法更适合命名为propertiesclassProperties等。