簡體   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