自动将属性值从一个对象复制到另一个对象,但使用相同的协议(Objective-C)

时间:2011-09-02 13:49:16

标签: objective-c ios properties copy

我有两个具有相同属性集的类,在协议中使用@property指令声明,它们都实现。现在我想知道是否可以使用第二个类的实例中的值自动填充第一个类的实例(反之亦然)。 我希望这种方法是健壮的,这样如果我改变协议中声明的属性,就不需要在复制方法中添加额外的代码。

1 个答案:

答案 0 :(得分:9)

是的,鉴于具体情况,可能有各种方法解决这个问题。

目前我能想到的是先获取源对象的所有属性,然后使用setValue:value forKey:key设置目标对象的值。

检索所有自定义属性的代码:

-(NSSet *)propertyNames {
  NSMutableSet *propNames = [NSMutableSet set];
  unsigned int outCount, i;
  objc_property_t *properties = class_copyPropertyList([self class], &outCount);
  for (i = 0; i < outCount; i++) {
    objc_property_t property = properties[i];
    NSString *propertyName = [[[NSString alloc] 
      initWithCString:property_getName(property)] autorelease];
    [propNames addObject:propertyName];
  }
  free(properties);

  return propNames;
}

您可能需要查看Key-Value Coding Programming Guide以获取更多信息。