假设我有一个数组 X,其中包含 [A,B,C,D,nil];
我有第二个数组 Y,其中包含 [E,F,G,H,I,J,nil];
如果我执行以下命令:
//Append y to x
[x addObjectsFromArray:y];
//Empty y and copy x
[y removeAllObjects];
y = [x mutableCopy];
y 的值是多少?是吗?:
[A,B,C,D,E,F,G,H,I,J,nil]
我是否正确执行了复制?
在操作结束时,我希望 y 为[A,B,C,D,E,F,G,H,I,J]
最佳答案
开始时:
x 是 [A, B, C, D] (nil 不是数组的一部分,它只是告诉 initWithObjects: 对象列表的末尾在哪里)。 y 是 [E, F, G, H, I, J]
[x addObjectsFromArray:y]; // only works if x is a mutable array
x 是 [A、B、C、D、E、F、G、H、I、J]
y 是 [E, F, G, H, I, J]
[y removeAllObjects]; // only works if y is a mutable array.
x 是 [A、B、C、D、E、F、G、H、I、J]
y 是 []
y = [x mutableCopy];
x 是 [A、B、C、D、E、F、G、H、I、J]
y 是 [A、B、C、D、E、F、G、H、I、J]
请注意,您清空的先前版本的 y 可能已泄漏,因为您使用指向 x 的新可变副本的指针覆盖了该指针。你应该这样做:
[y release];
y = [x mutableCopy];
或者如果您通过使用 +arrayWithObjects: 而不是 +alloc 后跟 -initWithObjects: 简单地获得 y
y = [x mutableCopy]; // release not necessary because you didn't own y (you do now though).
关于iphone - 对 Objective-C 中复制数组感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2994347/