一般的に私は、ブロックが強く保持されていないので、UIView.animate()を使用するときに自己を弱くする必要はないが、遅延のために次のビットのコードで弱を使用するための引数があることを認識しています?なぜ誰かがそこにいると言うだろうか?遅延があり、コレクションビューでバッチ更新を実行すると、UIView.animateで自己が弱くなるはずですか?
UIView.animate(withDuration: 0.1, animations: {
self.performAction()
}
次の例では、なぜ弱い自己を使用する必要がありますか弱い自己を使用する必要はありませんか?
collectionView.performBatchUpdates({
self.collectionView.reloadData()
...
})
をホープのようなので、あなたのコードは、より多くのを見ている必要がありますあなたの答えをいただき、ありがとうございます。私は今、私の疑問は、なぜ誰かがこのような状況で強く捕まえるべきではないと言っているのだろうと思うのですか?遅延/更新がしばらくの間、ユーザーが別の場所に移動し、親(コントローラ)の割り当てが解除され、その後何が起こるかといった状況がありますか?または、自己が弱くなければならないと言うのは間違っていますか? – jeh
ブロックにセルフが渡された場合、戻るボタンをタップして親VCに移動しても、セルフアロケーションは解除されません。これを確認するには、deinitを書いてください。ブロック終了の完了後にのみ呼び出されます。だから今あなたが離れて移動するとどうなるのか知っています:)強く捉えれば、自己はゼロにならないでしょう。しかし、IBOutletとしてドラッグされたUIコンポーネントは、デフォルトでは弱いです。だからあなたのブロックがそれらの要素にアクセスするまでには、定義によって彼らは決して強く保持されなかったから解放されたかもしれません –
一方、自己によって強く保持されているものはすべてブロック内で利用可能になります。そのため、私はコレクションビューに注意深くアクセスしていたスニペットを追加しました。そして、使用しないでください!:)最後に、ブロックの実行が永久にかかっているか、または何らかの条件に基づいて決して実行できないオプションのブロックがある場合、ブロックの実行が完了するまで自己は解放されないため、弱い自己を渡す唯一のシナリオがあります。そのようなシナリオでは、自己は自殺するだろう:) –