objektif-c - Masalah tentang pelepasan memori di bawah ARC dalam pembangunan iOS
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-07-03 11:43:05
0
2
1330

Klik butang pada halaman 1 untuk melompat ke halaman 2. Pada masa ini, memori meningkat sebanyak 5 MB Kemudian klik butang pada halaman 2 untuk mengetepikan halaman 2. Pada masa ini, kaedah dealloc halaman 2 dilaksanakan, tetapi. memori 5 MB tidak dikeluarkan. kenapa?
Bukankah memori di bawah ARC dikeluarkan tepat pada masanya?
Bagaimanakah kita harus menilai sama ada pengawal paparan atau objek benar-benar dikeluarkan?

Nota: Saya menyemak penggunaan memori melalui sesi nyahpepijat Xcode.

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

membalas semua(2)
世界只因有你

Tambahkan kod berikut pada kelas dan nilai status keluaran kelas ini dengan melihat sama ada terdapat log kelas apabila ia diketepikan:

#pragma mark - dealloc

-(void)dealloc {
    NSLog(@"dealloc %@", NSStringFromClass([self class]));
}

Sebagai contoh, log nama kelas MyViewController, 如果释放成功的话会有dealloc MyViewController.
Kemudian nyahpepijat sekali lagi untuk mengetahui puncanya.

Situasi yang mungkin:

  • Di suatu tempat strong kelas ini dirujuk

  • block中直接使用self(应该使用__weak typeof(self) weakSelf = self,然后在block中使用weakSelf)

巴扎黑
  1. Pengawal menulis semula kaedah -(void)dealloc, semak sama ada kaedah dipanggil apabila pengawal menolak atau muncul.

  2. Gunakan analisis untuk menganalisis memori Apl

  3. Jika anda menggunakan xcode versi 8.0 ke atas, anda boleh melihat peta memori.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan