點選頁面1上的按鈕跳到頁面2,此時記憶體增加5兆,然後點選頁面2上的按鈕dismiss頁面2,這時執行了頁面2的dealloc方法,但是那5兆記憶體卻沒有釋放。為什麼?
ARC則下的記憶體不是及時釋放?
我們應該怎麼判斷一個視圖控制器或物件是否真正的釋放?
註:記憶體使用情況我是透過Xcode的debug session來看的。
世界只因有你2017-07-03 11:45:05
在類別中加入以下程式碼,透過看dismiss的時候是否有該類別的log來判斷這個類別的釋放情況:
#pragma mark - dealloc
-(void)dealloc {
NSLog(@"dealloc %@", NSStringFromClass([self class]));
}
例如類別名稱MyViewController
, 如果釋放成功的話會有dealloc MyViewController
的log。
然後再調試,找出到底是什麼造成的。
可能情況:
在某個地方strong
引用了該類
在block
中直接使用self
(應該使用__weak typeof(self) weakSelf = self
,然後在block中使用weakSelf
)🎟
巴扎黑2017-07-03 11:45:05
控制器重寫-(void)dealloc
方法, 在控制器dismiss或是pop時看該方法有沒有呼叫.
用analyze分析App記憶體
如果是xcode 8.0版本以上的可以查看記憶體圖.