用数组替换数组

时间:2010-06-14 22:43:55

标签: objective-c cocoa cocoa-touch ipad nsmutablearray

我有和NSMutableArray,我想用另一个替换它,但如果我尝试这样做...

firstArray = secondArray;

...然后它似乎擦除整个firstArray并且我收到此错误消息..

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

......界限应该是(6)不是(0)。

是否有正确的方法来替换阵列?

PS:我已经检查过secondArray并且它运行正常。

2 个答案:

答案 0 :(得分:1)

如果您想将firstArray变量作为对第二个变量的引用,请执行以下操作:

[firstArray release];
firstArray = [secondArray retain];

如果您想让firstArray复制第二份,请执行:

[firstArray release];
firstArray = [secondArray mutableCopy];

(在这两种情况下,release预先假定您已分配数组或先前已retain - ed或copy - 编辑它。如果不是,您可以跳过该位。无论哪种方式你拥有新阵列并且必须在适当的时候release。)

如果你想用第二个数组的内容替换第一个数组的内容(因为副本没有太大的不同,但是涉及一个较少的对象破坏和创建),那么我认为你会有做这样的事情:

[firstArray removeAllObjects];
[firstArray addObjectsFromArray:secondArray];

答案 1 :(得分:0)

您将firstArray指针指定给secondArray指针的指针,因此您将丢失对firstArray对象的引用,并且它会被泄露。如果要替换firstArray对象中的对象,请使用-replaceObjectsInRange:withObjectsFromArray:或仅-release firstArray对象,并将firstArray指定给[secondArray mutableCopy]

我建议您阅读C指针以及Objective-C内存管理规则,以确保您已牢牢掌握基础知识。