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.
Tambahkan kod berikut pada kelas dan nilai status keluaran kelas ini dengan melihat sama ada terdapat log kelas apabila ia diketepikan:
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
)Pengawal menulis semula kaedah
-(void)dealloc
, semak sama ada kaedah dipanggil apabila pengawal menolak atau muncul.Gunakan analisis untuk menganalisis memori Apl
Jika anda menggunakan xcode versi 8.0 ke atas, anda boleh melihat peta memori.