次のように、ブロックを保持するオブジェクトへの参照を提供する方法でブロックを使用しようとしています。
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
whereには、タイプThing
のプロパティがあります。run_block
RunBlock
Thing *thing = [Thing thingWithBlock^(Thing *owner, ThingFinishBlock finish) { ... }];
run_block
内で from を呼び出すと、次のThing
ようになります。
__weak typeof(self) this = self;
_finish_block = ^(){ ... }
self.run_block(this, _finish_block);
だから私が今疑問に思っているのは、run_block
の最初のパラメーターを のThing *owner
前に付けずに定義しても安全ですか__weak
、それとも保持ループが発生するのでしょうか? ポインターは__weak
typedef のように既に定義されており、指定されたパラメーターは既に__weak
.
^(__weak Thing *owner ...){ ... }
とは対照的に
^(Thing *owner, ...) { ... }
ありがとう!