ios - 我想知道 capturing self strongly in this block 警告造成的后果有哪些
PHPz
PHPz 2017-04-17 17:50:04
0
3
658

项目上线了 但是一直有一个BUG修复不了 似乎那个crash崩溃地址每次都不同 所以很难定位类似libobjc.A.dylib objc_msgSend (sendMessage:)这样的错误

检查代码 发现有这么一个在ARC模式下的警告
capturing self strongly in this block is likely to lead to a retain cycle 这是一个block导致的循环引用
这个警告会导致什么问题 会导致直接崩溃吗 我想知道跟上面的崩溃有联系吗

PHPz
PHPz

学习是最好的投资!

membalas semua(3)
Ty80

Terdapat beberapa perbezaan antara keduanya.
objc_msgSend (sendMessage:) adalah kerana kaedah dipanggil pada objek yang dikeluarkan.

menangkap diri dengan kuat dalam blok ini berkemungkinan membawa kepada kitaran pengekalan
akan menyebabkan objek yang dicipta tidak dilepaskan.
Sebagai contoh, setiap kali anda memasukkan vc, ia baru dibuat. Blok dalam vc mempunyai rujukan yang kuat kepada diri sendiri.
Ini akan menyebabkan vc ini tidak dapat dikeluarkan Vc baharu akan dibuat setiap kali anda masuk, dan vc lama masih wujud. Akhirnya, aplikasi akan dikosongkan oleh sistem kerana ia mengambil terlalu banyak memori.

Ty80

Ia mungkin, tetapi tidak mungkin, tetapi rujukan pekeliling mesti dialih keluar.

左手右手慢动作

Ini akan menyebabkan kebocoran memori, tetapi sama ada ia akan menyebabkan ranap bergantung pada keadaan.
Sebagai contoh, VC tertentu mendaftarkan pemberitahuan, tetapi disebabkan rujukan pekeliling, ia tidak dikeluarkan dengan betul Selepas itu, pemberitahuan itu disiarkan di tempat lain, maka VC akan melakukan operasi yang sepadan, mungkin jika operasi itu objek telah dikeluarkan, ia mungkin terhempas.
Sukar untuk mencari ralat seperti libobjc.A.dylib objc_msgSend (sendMessage:) anda harus melihat jika terdapat maklumat lain, seperti sesuatu yang serupa dengan ini:

Anda boleh cuba menggunakan Fabrik.

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