[英]Memory Retention and Leaks in iOS
这是有关内存泄漏的一般问题。 假设您有以下代码:
NSObject *object = [[NSObject alloc] init];
NSArray *array = [[NSArray arrayWithObjects:object] retain];
[object release];
[array release];
那是内存泄漏吗? 就像,我是否必须枚举数组中的所有对象,然后在释放整个数组之前一一释放它们? 还是NSArray的dealloc方法会释放其中的所有对象以及数组本身?
谢谢你的帮助! 内存管理可能非常棘手。
以下是一些规则:
每当调用alloc
,都必须最终调用release
对于每个retain
,您都应该有一个release
当您将对象添加到数组时,它将调用该对象的保留。 如果不释放指向该对象的指针,那将是一个泄漏。 释放数组时,它将调用它所保存的所有对象上的release,因为它先前调用了keep。
NSObject *object = [[NSObject alloc] init];
// object has retain count 1
NSArray *array = [[NSArray arrayWithObjects:object] retain];
// array is autoreleased but has a retain, so has retain count 1
// object now has retain count 2
[object release];
// object now has retain count 1
[array release];
// array is now set to autorelease,
// once that happens, array will be sent dealloc and object will be released
因此,没有内存泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.