1

同僚とのちょっとした口論を解決するのを手伝ってください。この状況では、弱い自己は必要ありませんよね?

(彼は私を信じていません)

__weak auto weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
    [weakSelf _someHelper];
});
4

2 に答える 2

2

このような場合、必ずしも必要ではありません。この状況では、この構文上のノイズを気にしないことがよくあります。

そうであった場合、dispatch_afterまたはこのメイン キューへのディスパッチが何らかの非同期呼び出し内に埋もれていた場合は、weakSelfパターンの引数があります (そのため、強い参照を必要以上に長く保持しないでください) が、単純な例では、すぐにディスパッチします。メイン キューへの弱い参照selfは必要ありません。

そうは言っても、ここでパターンを採用することは間違いではありません。weakSelf不要なだけです。


私が考えている疑問は、メイン キューにディスパッチしている場合、バックグラウンド キューで時間のかかる作業を行っていることを示唆しているということです。その場合、強い参照を保持することを控えるのselfが賢明かもしれません。このコードを実行している場所のより広いコンテキストを見ずして、何とも言えません。

于 2020-12-11T20:26:47.517 に答える