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