我有和NSMutableArray,我想用另一个替换它,但如果我尝试这样做...
firstArray = secondArray;
...然后它似乎擦除整个firstArray并且我收到此错误消息..
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'
......界限应该是(6)不是(0)。
是否有正确的方法来替换阵列?
PS:我已经检查过secondArray并且它运行正常。
答案 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内存管理规则,以确保您已牢牢掌握基础知识。