[解決済み] ARC対応コードにおける「このブロック内で強く[オブジェクト]を捕捉するとretainサイクルになる可能性があります」という警告の修正
2022-05-17 15:50:25
質問
ARC を有効にしたコードで、ブロックベースの API を使用するときに、潜在的な保持サイクルに関する警告を修正するにはどうすればよいですか。
警告は
Capturing 'request' strongly in this block is likely to lead to a retain cycle
このコードのスニペットによって生成されます。
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:...
[request setCompletionBlock:^{
NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.rawResponseData error:nil];
// ...
}];
警告は、オブジェクトの使用と連動している
request
をブロック内で使用したことに関連しています。
どのように解決するのですか?
自分自身に返信する。
私のドキュメントの理解では、キーワード
block
を使用し、ブロック内でそれを使用した後に変数をnilに設定することは問題ないはずですが、それはまだ警告を表示します。
__block ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:...
[request setCompletionBlock:^{
NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.responseData error:nil];
request = nil;
// ....
}];
更新しました。 キーワード '_' で動作するようになりました。 弱い' の代わりに ' _block' の代わりに '_
ASIHTTPRequest *_request = [[ASIHTTPRequest alloc] initWithURL:...
__weak ASIHTTPRequest *request = _request;
[request setCompletionBlock:^{
NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.responseData error:nil];
// ...
}];
iOS 4 もターゲットにしたい場合は
__unsafe_unretained
の代わりに
__weak
. 同じ動作ですが、オブジェクトが破壊されたときに自動的にnilに設定されるのではなく、ポインタがぶら下がったままになります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン