我试图制作一个包含5个实例变量的行星对象的mutableCopy(其中一个是字符串文字的NSMutableArray。我的问题是我不确定如何将newPlanet>数据设置为自我的副本>数据,这有意义吗?
-(id) mutableCopyWithZone: (NSZone *) zone {
Planet *newPlanet = [[Planet allocWithZone:zone] init];
NSLog(@"_mutableCopy: %@", [newPlanet self]);
[newPlanet setName:name];
[newPlanet setType:type];
[newPlanet setMass:mass];
[newPlanet setIndex:index];
// NSMutableArray *data; HOW TO: newPlanet>data = self>data?
return(newPlanet);
}
基于Chuck& amp;的评论。 bbum我更新了我的方法并添加了以下内容......
@property(retain) NSMutableArray *data;
@synthesize data;
-(id) mutableCopyWithZone: (NSZone *) zone {
Planet *newPlanet = [[Planet allocWithZone:zone] init];
NSLog(@"_mutableCopy: %@", [newPlanet self]);
[newPlanet setName:name];
[newPlanet setType:type];
[newPlanet setMass:mass];
[newPlanet setIndex:index];
NSMutableArray *copiedArray = [[self data] mutableCopyWithZone:zone];
[newPlanet setData: copiedArray];
[copiedArray release];
return(newPlanet);
}
非常感谢
加里
答案 0 :(得分:6)
这里没什么特别的。像这样:
NSMutableArray *copiedData = [[self data] mutableCopyWithZone:zone];
newPlanet.data = copiedData;
[copiedData release];
答案 1 :(得分:2)
你可能想要
newPlanet->data = [data mutableCopyWithZone:zone];
请注意,如果您使用setter(例如dot-access或setData:
),那么您将触发另一个retain,因此您应该适当地处理它。
答案 2 :(得分:0)
您是否尝试过类似[newPlanet setData:[[self data] mutableCopyWithZone:zone]];
的内容?