释放数组时 NSMutableDictionary 中使用的对象的内存会发生啥?
Posted
技术标签:
【中文标题】释放数组时 NSMutableDictionary 中使用的对象的内存会发生啥?【英文标题】:what happends with the memory of the objects used in NSMutableDictionary when releasing the array?释放数组时 NSMutableDictionary 中使用的对象的内存会发生什么? 【发布时间】:2011-09-21 22:05:21 【问题描述】:我很好奇当我使用[array release]
时,我使用[array addObject:object]
推送的对象的内存会发生什么情况
【问题讨论】:
【参考方案1】:当你打电话时
[array addObject:object]
array
保留 object
,从而增加其保留计数。
稍后,当array
发送消息dealloc
时,它会在object
上调用release
。
为避免内存泄漏,您可能必须在将object
添加到array
后释放它,例如
NSObject *object = [[NSObject] alloc] init];
[array addObject:object];
[object release];
请务必查看Memory Management Programming Guide,以确保您没有过度或不足释放object
。
【讨论】:
看起来你比我打败了这个! "为避免内存泄漏,您应该在将对象添加到数组后释放它..." 嗯,不。 OP从未说明他如何获得参考。他应该像在其他任何地方一样遵循内存管理指南。【参考方案2】:addObject 对您添加的对象进行保留。当你释放数组时,它会自动调用它持有的所有对象的释放。
【讨论】:
【参考方案3】:当您执行 [array addObject: object] 时,数组将保留插入到数组中的对象。为避免内存泄漏,不要忘记释放插入的原始对象,否则插入数组的对象的保留计数将是 2 而不是 1:
SomeClassObject *obj = [[SomeClassObject alloc] init];
[array addObject:obj];
[obj release];
由于数组拥有数组内部的对象(持有指向该对象的指针并如前所述进行了保留),当您释放数组时,数组知道释放其中的任何对象。工作已为您完成!
【讨论】:
【参考方案4】:NSArrays 保留添加的对象,因此您不必自己添加额外的保留,完成后可以释放数组。
【讨论】:
以上是关于释放数组时 NSMutableDictionary 中使用的对象的内存会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个包含许多 NSMutableArrays 的 NSMutableDictionary
使用 NSMutableDictionary 将对象保存到数组
ios手动添加数组字典(NSMutableDictionary)
NSMutableDictionary 输入到数组中以某种方式丢失了信息
使用 NSMutableDictionary 和数组填充单元格的 TableView
我们如何在 NSMutableArray 中添加带有 Image 作为对象的 NSMutableDictionary 并将这个数组写入 Plist