我制作了这个方法
-(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'
答案 0 :(得分:1)
如果您需要类方法,则必须使用+
而不是-
。在类方法中,self
引用了类,因此您可以将c
替换为self
。 class_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:
)。此约定意味着您的方法更适合命名为properties
或classProperties
等。