Gre*_*reg 15 iphone memory-leaks objective-c nsmutablearray ios
如果我有一个自定义对象的NSMutableArray,我怎么能轻松清除数组而不会引起任何内存问题?假设自定义对象类中有一个dealloc方法,它正确地释放了一个实例变量等.
例如,可以使用NSArray"removeAllObjects"方法吗?
如果是 - 这是如何工作的 - "removeAllObjects"会在每个对象上调用"dealloc"方法,因为它会删除它们
如果不是 - 最简单的方法是什么?
编辑(4回复后) - 在回复之后的最后一个澄清问题 - 我仍然不太确定我设置保留的自定义对象中的实例变量/属性?这些似乎只能通过我的自定义对象类中的"dealloc"方法释放,我们手动执行此操作以及[super release].
因此,如果重新清除数组,如果我执行removeAllObjects,然后NSArray向我的自定义对象发出"释放",但不调用"dealloc",那么我的实例变量如何释放?
Mat*_*uch 33
removeAllObjects将从数组中删除该对象.此过程将向对象发送释放消息,这将减少其引用计数.当引用计数达到零时,将释放对象.
不要这样做,因为它会泄漏.
NSObject *object = [[NSObject alloc] init]; + 1
[array addObject:object]; + 1
[array removeAllObjects]; - 1
=======
= + 1 -> Leak
Run Code Online (Sandbox Code Playgroud)
这是正确的方法:
NSObject *object = [[[NSObject alloc] init] autorelease]; + 1 (from alloc) - 1 (from autorelease)
[array addObject:object]; + 1
[array removeAllObjects]; - 1
=======
= 0 -> Object will be deallocated
Run Code Online (Sandbox Code Playgroud)
您可以只释放数组,而不是调用removeAllObjects.如果一个数组被释放,那么它内部的所有东西都会被释放,如果没有对该对象的其他引用,它将被解除分配.
| 归档时间: |
|
| 查看次数: |
41288 次 |
| 最近记录: |