iOS中的内存保留和泄漏

Mas*_*son 0 iphone memory-leaks memory-management objective-c ios

这是关于内存泄漏的一般问题.假设您有以下代码:

NSObject *object = [[NSObject alloc] init];
NSArray *array = [[NSArray arrayWithObjects:object] retain];
[object release];
[array release];
Run Code Online (Sandbox Code Playgroud)

这是内存泄漏吗?比如,我是否必须枚举数组中的所有对象并在释放整个数组之前逐个释放它们?或者NSArray的dealloc方法是否释放其中的所有对象以及释放数组本身?

谢谢你的帮助!内存管理可能非常棘手.

Pen*_*One 7

以下是一些规则:

  • 无论何时打电话alloc,您最终都必须打电话release

  • 对于每一个人retain,你应该有一个release

将对象添加到数组时,它会调用该对象上的retain.如果你没有释放指向该对象的指针,那将是一个泄漏.当你释放数组时,它会在它拥有的所有对象上调用release,因为它之前调用了retain.

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
Run Code Online (Sandbox Code Playgroud)

因此没有内存泄漏.