iphone - 对 Objective-C 中复制数组感到困惑

标签 iphone objective-c cocoa cocoa-touch arrays

假设我有一个数组 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/

相关文章:

cocoa - NSImage 变换后变得模糊

Swift:通过其选择器获取菜单项

ios - 管理设备方向 - IOS

iphone - 如何在 iOS 7 中以编程方式隐藏状态栏?

iphone - 做 git status, objective c, git 时总是得到 Crashlytics is modified

objective-c - 如何判断一个 iOS 应用程序是否有新安装或更新?

ios - objective-c 从我的 iOS 应用程序将图像分享到 Instagram

objective-c - 捕获 OS X 10.9+ 警报表返回代码的正确方法是什么?

iphone - 为 ios 交叉编译 speex 库

iphone - IOS 7 - 添加覆盖崩溃应用程序