mutableCopyWithZone,复制NSMutableArray?

时间:2010-01-06 20:24:11

标签: objective-c

我试图制作一个包含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);
}

EDIT_001:

基于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);
}

非常感谢

加里

3 个答案:

答案 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]];的内容?