释放数组时NSMutableDictionary中使用的对象的内存会发生什么?

时间:2011-09-21 22:05:21

标签: iphone objective-c release nsmutabledictionary autorelease

我很好奇当我使用[array addObject:object]

时,我使用[array release]推送的对象的内存会发生什么
  • addObject复制指针吗?
  • 我必须保留对象吗?
  • 我是否必须制作一个for并释放每个对象然后释放数组?

4 个答案:

答案 0 :(得分:1)

致电时

[array addObject:object] 

array保留object,从而增加其保留计数。

稍后,当array发送消息dealloc时,它会在release上调用object

为避免内存泄漏,您可能需要在将object添加到array后释放NSObject *object = [[NSObject] alloc] init]; [array addObject:object]; [object release]; ,例如

object

请务必查看Memory Management Programming Guide以确定您未发布或未发布{{1}}。

答案 1 :(得分:1)

addObject会对您添加的对象执行保留。当你释放数组时,它会自动调用它所拥有的所有对象的释放。

答案 2 :(得分:1)

当您执行[array addObject:object]时,数组将保留插入到数组中的对象。为避免内存泄漏,请不要忘记释放插入的原始对象,否则插入到数组中的对象的保留计数为2而不是1:

SomeClassObject *obj = [[SomeClassObject alloc] init];
[array addObject:obj];
[obj release];

由于数组拥有数组内部的对象(保存指向该对象的指针并执行保留,如前所述),因此当您释放数组时,数组会知道释放其中的任何对象。这项工作已经完成了!

答案 3 :(得分:0)

NSArrays保留添加的对象,因此您不必自己添加额外的保留,并且可以在完成后释放该数组。