我目前正在开发一款基于磁贴的游戏,其中包含Xcode中的数字。在我的方法checkGameOver中,每个磁贴都会移动到每个可能的组合,并检查它们是否有效移动。但是,由于该方法更改了名为' values'的可变数组,我认为避免这种情况的最简单方法就是只复制一个'值,并将其存储到' 39; originalValues'然后恢复它。但是,它似乎确实无法改变。我也试过使用副本。我不明白为什么它不起作用。是不是checkGameOver真的是因为成千上万的计算,并且在值被改变之后它还没有完成?
NSArray *originalValues = [NSMutableArray arrayWithArray:values];
[self checkGameOver];
values = [NSMutableArray arrayWithArray:originalValues];
说明:我有数组A(值),我创建了该数组的副本,B(originalValues)。我对A进行了更改,但更改也反映在B中。
答案 0 :(得分:1)
如果要制作NSArray
的深层副本,则需要使用存档。请参阅以下示例:
NSMutableArray *values = [@[@"one", @"two"] mutableCopy];
NSData *originalValues = [NSKeyedArchiver archivedDataWithRootObject:values];
[values replaceObjectAtIndex:1 withObject:@"something"];
NSLog(@"changed: %@", values);
values = [NSKeyedUnarchiver unarchiveObjectWithData:originalValues];
NSLog(@"restored: %@", values);