2016-02-23 60 views
0

在objective-c中,NSCopying協議爲我們提供了copymutableCopy。他們都實現了copyWithZone:選擇器。現在,我的要求是:iOS,如何複製一個對象而不改變它的指針?

爲:地址爲0x00002bfa

A.name = @"John"; 
A.age = 10; 

對於B:地址是0x0000843d

B.name = @"Lily"; 
B.age = 20; 

A = [B customCopy];

現在是:

對於A:地址是0x00002bfa

A.name = @"Lily"; 
A.age = 20; 

只改變A的屬性值,地址仍然沒有改變。 因爲它是自定義的NSObject。我認爲NSCopying無法正常工作。原因copymutableCopy將改變A的指針,讓它指向B.這不是我的意願。

是否清楚?任何想法!很長一段時間我對這個問題感到困惑。謝謝!

+0

NSCopying只改變值而不是地址。而且我認爲你希望對象A的地址在值更改時也改變了? –

+0

請澄清你的問題。如果你想改變A的地址,那麼你爲什麼要複製和分配?只需創建一個新實例並使用屬性B初始化它。 – Annie

+0

感謝AniKhechoyan和warisshams,我不希望更改A的地址。我想要保留它的舊指針。NSCopying不能這樣做,我堅信!在我的例子中,我向你展示了從開始到結尾A的地址是'0x00002bfa'! – ziacke

回答

0

塞爾吉的解決方案應該可以工作,但是如果你想漫步到未知的火焰,你可以嘗試類似於:

#import <objc/runtime.h> 
... 
memcpy((__bridge void *)A, (__bridge const void *)B, class_getInstanceSize([A class])); 
+0

真棒!那是我想要的 – ziacke

1

嘗試是這樣的

- (void) assignPropertiesFrom:(Object *) object { 
    self.name = object.name; 
    self.age = self.age; 
} 

[A assignPropertiesFrom:B]; 

它將重新填充與B的屬性值,但將仍是同一個對象,所以任何人都抱着指針它將擁有所有的變化

相關問題