私は自分自身をキャプチャするときに強い参照サイクルを避ける必要があると言って、Apple's documentationに気づいた。Objective-Cでは弱い自己をブロックで使用する必要がありますか?
この例のブロックは、自己のプロパティです。
しかし、dispatch_asyncステートメントにブロックをローカル変数として配置するとどうなりますか?
この場合、自己のメソッドを直接呼び出しても保持サイクルは作成されません。
this articleにweakSelfを生成する次のコードはありますか?与えられた例では
// your code
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf doThis];
[strongSelf doThat];
[Manager.sharedInstance updateSuccessCount];
}
});
// more code
関連するコードとあなたの質問を更新します。コールバックが呼び出されたときにブロック自体がリリースされているので – rmaddy
そうだね、これはサイクルにはなりません。しかし、コールバックが変数に格納されている場合は、いつ解放されるのかを検討する必要があります。 'self.block'が再割り当てされるか' self'が解放されたとき、Appleの例で は、ブロックのみが解放されます。しかし、 'self'は決して解放されません。なぜなら、ブロックからの参照はまだずっと残っているからです。 –
@rmaddyこんにちは、ここでコードを更新しました。 –