在objective-c中,NSCopying协议为我们提供了copy
和mutableCopy
。它们都实现了copyWithZone:
选择器。现在,我的要求是:
对于A:地址为0x00002bfa
A.name = @"John";
A.age = 10;
对于B:地址为0x0000843d
B.name = @"Lily";
B.age = 20;
A = [B customCopy];
之后
现在A是:
对于A:地址为0x00002bfa
A.name = @"Lily";
A.age = 20;
只更改A的属性值,地址仍无变化。
因为它是自定义NSObject。我认为NSCopying不起作用。因为copy
和mutableCopy
会更改A的指针,让它指向B.这不是我的意愿。
清楚吗?任何的想法!很长一段时间我都很困惑这个问题。谢谢!
答案 0 :(得分:1)
尝试这样的事情
- (void) assignPropertiesFrom:(Object *) object {
self.name = object.name;
self.age = self.age;
}
[A assignPropertiesFrom:B];
它会重新填充A的属性值为B,但A仍然是同一个对象,所以任何持有指针的人都将拥有所有的更改
答案 1 :(得分:0)
Sergii的解决方案应该可行,但是如果你想漫步到未知的teritories,你可以尝试类似的东西:
#import <objc/runtime.h>
...
memcpy((__bridge void *)A, (__bridge const void *)B, class_getInstanceSize([A class]));