识别头文件与实现文件中的属性

时间:2014-01-14 19:36:48

标签: objective-c introspection objective-c-runtime declared-property

我一直对使用以下代码的内容感兴趣 自动构建我的对象(因为它们中有很多具有相当多的属性):

MyObject *myObject = [[myObject alloc] init];

unsigned int numberOfProperties = 0;
objc_property_t *propertyArray = class_copyPropertyList([MyObject class], &numberOfProperties);

for (NSUInteger i = 0; i < numberOfProperties; i++)
{
    objc_property_t property = propertyArray[i];

    NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];

    if (propertyName)
    {
        id valueForProperty = [myObject valueForKey:propertyName];
        [myObject setValue:valueForProperty forKey:propertyName];
    }

}
free(propertyArray);

然而,我注意到的是,这段代码不仅会尝试运行我的头文件中的属性,还会尝试运行我的所有实现属性,这是我不想要的。

由于Objective-C实际上并不区分公共属性和私有属性,因此我不知道如何做到这一点。有关如何表明我只对头文件中的属性感兴趣以有效模拟同一事物的任何想法?

1 个答案:

答案 0 :(得分:1)

简而言之,你没有。编译的程序中没有此信息。如果你真的想要,你需要编写一个自定义预处理器来执行此操作。