问题描述:app 出现内存偏高的问题,app 是一个展示图片居多的app,浏览多个图片list 页以后,内存最高峰值跑到了150m,然后app 出现了闪退; 问题: ① 怎么能够避免内存偏高的问题? ② 如果不能避免那么怎么降低内存偏高呢? ③ 如果上面两个问题都不能解决,那么出现内存偏高的时候怎么处理可以避免闪退呢?
Seperti yang dinyatakan di atas, semak dahulu sama ada terdapat kebocoran memori.
1. Apakah punca kemalangan? Jika anda tidak melihat log, anda tidak pasti bahawa ia disebabkan oleh memori yang tinggi. 2. Jika anda menyemak imbas senarai imej, anda boleh menggunakan SDWebImage atau sebagainya untuk cache imej, menetapkan had atas memori yang digunakan oleh cache dan menggunakan semula jadual, yang tidak akan menggunakan banyak memori .
Jika terlalu banyak gambar dipaparkan dan ingatan bertambah, semak dahulu sama ada gambar telah dikeluarkan. Dalam keadaan biasa, gambar tidak dikeluarkan tepat pada masanya.
Jika ingatan tiba-tiba menjadi tinggi selepas operasi tertentu dan kekal stabil atau terus meningkat, pada dasarnya ia boleh ditentukan sebagai kebocoran ingatan. Apabila menilai kebocoran memori, pertama, anda harus menentukan di mana dalam kod kebocoran memori berlaku Kedua, jika ia disebabkan oleh imej, ia mungkin kerana imej yang diminta oleh rangkaian tidak mempunyai tempatan; cache; Ketiga, perhatikan permintaan rangkaian, operasi pangkalan data dan keluaran kelas dan subkelas UIView. Akhir sekali, anda boleh nyahpepijat projek dalam XcodeProduct->Profile Selepas kompilasi selesai, panggil Instrumen dan gunakan Kebocoran untuk melihat kebocoran memori.
Pengoptimuman imej yang lebih biasa juga mungkin kerana imej dalam data asal terlalu besar, menyebabkan memori meningkat. Adalah disyorkan untuk menggunakan lakaran kecil dalam senarai.
Saya rasa gambar pada sel yang meluncur keluar dari skrin tidak dikeluarkan Secara umumnya, sel yang meluncur keluar dari skrin akan dikeluarkan-->Kandungan dalam sel dikeluarkan-->UIImageView. dikeluarkan--> Kemudian UIImage dikeluarkan dan menyemak sama ada terdapat pautan dalam rantaian keluaran yang belum dikeluarkan. Besar kemungkinan objek UIImage anda dirujuk di tempat lain, seperti disimpan dalam NSArray, seperti dalam NSCache. Pelepasan bermaksud menyimpan objek ini tanpa sebarang rujukan kukuh
Sila pastikan anda mencuba mod keluaran peranti sebenar untuk ujian
Sila pastikan tiada kebocoran memori
Seperti yang dinyatakan di atas, semak dahulu sama ada terdapat kebocoran memori.
1. Apakah punca kemalangan? Jika anda tidak melihat log, anda tidak pasti bahawa ia disebabkan oleh memori yang tinggi.
2. Jika anda menyemak imbas senarai imej, anda boleh menggunakan SDWebImage atau sebagainya untuk cache imej, menetapkan had atas memori yang digunakan oleh cache dan menggunakan semula jadual, yang tidak akan menggunakan banyak memori .
Jika terlalu banyak gambar dipaparkan dan ingatan bertambah, semak dahulu sama ada gambar telah dikeluarkan. Dalam keadaan biasa, gambar tidak dikeluarkan tepat pada masanya.
Jika ingatan tiba-tiba menjadi tinggi selepas operasi tertentu dan kekal stabil atau terus meningkat, pada dasarnya ia boleh ditentukan sebagai kebocoran ingatan.
Apabila menilai kebocoran memori, pertama, anda harus menentukan di mana dalam kod kebocoran memori berlaku
Kedua, jika ia disebabkan oleh imej, ia mungkin kerana imej yang diminta oleh rangkaian tidak mempunyai tempatan; cache;
Ketiga, perhatikan permintaan rangkaian, operasi pangkalan data dan keluaran kelas dan subkelas UIView.
Akhir sekali, anda boleh nyahpepijat projek dalam Xcode
Product->Profile
Selepas kompilasi selesai, panggil Instrumen dan gunakan Kebocoran untuk melihat kebocoran memori.Pengoptimuman imej yang lebih biasa juga mungkin kerana imej dalam data asal terlalu besar, menyebabkan memori meningkat. Adalah disyorkan untuk menggunakan lakaran kecil dalam senarai.
Lakukan beberapa operasi pelepasan yang munasabah untuk membuka ruang apabila digunakan.
Saya rasa gambar pada sel yang meluncur keluar dari skrin tidak dikeluarkan Secara umumnya, sel yang meluncur keluar dari skrin akan dikeluarkan-->Kandungan dalam sel dikeluarkan-->UIImageView. dikeluarkan--> Kemudian UIImage dikeluarkan dan menyemak sama ada terdapat pautan dalam rantaian keluaran yang belum dikeluarkan. Besar kemungkinan objek UIImage anda dirujuk di tempat lain, seperti disimpan dalam NSArray, seperti dalam NSCache. Pelepasan bermaksud menyimpan objek ini tanpa sebarang rujukan kukuh