suchen

Heim  >  Fragen und Antworten  >  Hauptteil

object-c – Ein Problem mit der Speicherfreigabe unter ARC in der iOS-Entwicklung

Klicken Sie auf die Schaltfläche auf Seite 1, um zu Seite 2 zu springen. Zu diesem Zeitpunkt erhöht sich der Speicher um 5 MB. Klicken Sie dann auf die Schaltfläche auf Seite 2, um Seite 2 zu schließen. Zu diesem Zeitpunkt wird die Dealloc-Methode von Seite 2 ausgeführt die 5 MB Speicher werden nicht freigegeben. Warum?
Wird der Speicher unter ARC nicht rechtzeitig freigegeben?
Wie sollen wir beurteilen, ob ein View-Controller oder ein Objekt wirklich freigegeben ist?

Hinweis: Ich habe die Speichernutzung durch die Debug-Sitzung von Xcode überprüft.

曾经蜡笔没有小新曾经蜡笔没有小新2775 Tage vor1359

Antworte allen(2)Ich werde antworten

  • 世界只因有你

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

    Antwort
    0
  • 巴扎黑

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

    1. 控制器重写-(void)dealloc方法, 在控制器dismiss或者是pop时看该方法有没有调用.

    2. 用analyze分析App内存

    3. 如果是xcode 8.0版本以上的可以查看内存图.

    Antwort
    0
  • StornierenAntwort