搜尋

首頁  >  問答  >  主體

objective-c - iOS開發中ARC下關於記憶體釋放的一個問題

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

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

曾经蜡笔没有小新曾经蜡笔没有小新2725 天前1312

全部回覆(2)我來回復

  • 世界只因有你

    世界只因有你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)🎟

      回覆
      0
  • 巴扎黑

    巴扎黑2017-07-03 11:45:05

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

    2. 用analyze分析App記憶體

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

    回覆
    0
  • 取消回覆