私が次のtypedefを持っていると仮定しましょう:
typedef void (^myBlock)(id);
そして、 myBlockを引数として受け入れ、それにいくつかのid変数を生成するメソッドmyMethodがあります。
void myMethod(id myObj, myBlock block) {
// ...
block(myObj);
// ...
}
だから私が次のものを持っている場合:
- (void) someMethod {
__block id myObj; // Some initialization local to the scope of someMethod;
// myObj = ... some assignment to myObj so it is not nil...
dispatch_async(someQueue(), ^{
// (*) Some long, possibly multi-queued and multi-blocked, processing,
// so we are sure that someMethod will run out:
// ...
// 1. Can I be sure that myObj is still alive and actual here
// after the long processing (*)?
myMethod(myObj, ^(id myObj) {
// (**) Some long, possibly multi-queued, processing here too...
// 2. Can I be sure that myObj is still alive and actual here
// after the long processing (**) finishes?
})
})
}
myObjを特別に保持して、異なるキュー/ブロックにまたがって存在するようにする必要がありますか?
明白で十分に文書化されたものを求めている場合は申し訳ありません-ARCがデフォルトである可能性が高いときにObjective-Cを学び始めたばかりなので、これらの保持カウント、自動リリース、その他のものについてあまり気にする必要はありません、そして、私がここで説明したような状況でのみそれらについて考えてください。