繁体   English   中英

iOS中的内存保留和泄漏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM