我是iPhone / Mac领域的新手,这可能是一个非常基本的问题,我做了一些搜索,但没有找到直接答案。
我想知道在添加时,Arrays / Mutable Arrays的addObject方法是浅层(仅指针)还是深层(复制对象)。
如果这是正确的做事方式,则假定addObject将执行NSString的深层复制。只是确认这是使用可变数组进行内存管理的正确方法......
答案 0 :(得分:2)
addObject:
执行浅拷贝。你遗漏的是NSMutableArray
保留了对象,所以它不会消失,但不需要深层复制。这是Objective-C内存管理的关键点。你应该阅读Memory Management Programming Guide。可可内存管理并不复杂,而且非常一致。我在Three Magic Words处有一个简短的摘要。
答案 1 :(得分:2)
将数组添加到数组时,其保留计数将增加。当一个对象的保留计数为0时,它将被释放。所以当你向一个anArray添加NSString时,它不会是一个副本(你可以改变foo,它也会在数组中被改变),但它会增加foo的保留计数由1。
NSString *foo = [[NSString alloc] initWithString@"bar"]; // retain count +1
[anArray addObject:foo]; // NOT COPIED, but retain count of 'foo' increased by 1
[foo release]; // retain count of foo decreased by 1
当你在某个时候释放anArray时,它会在其对象上调用release。因此,foo的保留计数最终将变为0,foo将被释放。
// some time later..
[anArray release]; // anArray released, foo retain count = 0.. foo gets released.
亲切的问候, 基督教