iOS,如何在不更改指针的情况下复制对象?

时间:2016-02-23 07:15:29

标签: ios

在objective-c中,NSCopying协议为我们提供了copymutableCopy。它们都实现了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不起作用。因为copymutableCopy会更改A的指针,让它指向B.这不是我的意愿。

清楚吗?任何的想法!很长一段时间我都很困惑这个问题。谢谢!

2 个答案:

答案 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]));