objective-c - iOS開發中ARC下關於記憶體釋放的一個問題
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-07-03 11:43:05
0
2
1331

點選頁面1上的按鈕跳到頁面2,此時記憶體增加5兆,然後點選頁面2上的按鈕dismiss頁面2,這時執行了頁面2的dealloc方法,但是那5兆記憶體卻沒有釋放。為什麼?
ARC則下的記憶體不是及時釋放?
我們應該怎麼判斷一個視圖控制器或物件是否真正的釋放?

註:記憶體使用情況我是透過Xcode的debug session來看的。

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回覆(2)
世界只因有你

在類別中加入以下程式碼,透過看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)🎟

巴扎黑
  1. 控制器重寫-(void)dealloc方法, 在控制器dismiss或是pop時看該方法有沒有呼叫.

  2. 用analyze分析App記憶體

  3. 如果是xcode 8.0版本以上的可以查看記憶體圖.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板