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

项目上线了 但是一直有一个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

学习是最好的投资!

全部回覆(3)
Ty80

兩者有些差別。
objc_msgSend (sendMessage:)是因為對釋放的物件呼叫方法。

capturing self strongly in this block is likely to lead to a retain cycle
會導致創建的物件無法釋放。
例如每次進入一個 vc 時,都是新建立的。 vc裡面的block對self強引用了。
這會導致這個 vc 無法釋放,每次進入都會創建新的vc,舊的vc也仍然存在。最後,應用程式會因為佔用記憶體過多被系統清理掉。

Ty80

有可能,但是可能性不大,但是循環引用 肯定要去掉的。

左手右手慢动作

這會導致記憶體洩露,但是是否會導致崩潰要看情況。
比如說,某個VC註冊了通知,但是由於循環引用,沒有得到正確釋放,而在這之後,別的地方post了這個通知,那麼,這個VC就會去執行相應操作,可能它所操作的東西已經被釋放了,那麼就可能會崩潰。
對於你的libobjc.A.dylib objc_msgSend (sendMessage:)這樣的錯誤,是很難定位的,你應該看看是否還有其他信息,比如類似於這樣的:

你可以試試使用Fabric.

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板