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

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

この 2 つにはいくつかの違いがあります。
objc_msgSend (sendMessage:) は、解放されたオブジェクトに対してメソッドが呼び出されるからです。

このブロックで自己を強く捉えると保持サイクルが発生する可能性が高く、
作成されたオブジェクトが解放されなくなります。
たとえば、vc に入るたびに、新しく作成されます。 vc のブロックには self への強い参照があります。
これにより、この vc は解放できなくなり、入力するたびに新しい vc が作成され、古い vc は残ります。最終的に、アプリケーションはメモリを大量に消費するため、システムによって削除されます。

いいねを押す +0
Ty80

可能性はありますが、可能性は低いですが、循環参照を削除する必要があります。

いいねを押す +0
左手右手慢动作

これによりメモリリークが発生しますが、クラッシュが発生するかどうかは状況によって異なります。
たとえば、ある VC が通知を登録しましたが、循環参照により正しくリリースされず、その後その通知が別の場所に投稿された場​​合、VC は対応する操作を実行します。リリースされているため、クラッシュする可能性があります。
libobjc.A.dylib objc_msgSend (sendMessage:) のようなエラーを見つけるのは困難です。次のような他の情報があるかどうかを確認する必要があります。

ファブリックを使ってみることができます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート