ブロックを使用したリテイン サイクルの回避については、ここにたくさん投稿されていますが、クラスやクラス メソッドを使用する場合はどうでしょうか。次のようなクラスがあるとします。
// MyClass.h
+ (void)doSomethingAsynch:(void (^)(void))block;
+ (void)doSomethingElse;
そして発信者はこれを言いたいです:
[MyClass doSomethingAsynch:^{
[MyClass doSomethingElse];
}
呼び出し元は MyClass の unsafe_unretained コピーを宣言する必要がありますか? それとも、保持カウントを増加させないシングルトンのようなクラスですか? とにかく常に存在させたいので、クラスの保持カウントを月に送信しても問題はありませんか?