次のように、ブロックを保持するオブジェクトへの参照を提供する方法でブロックを使用しようとしています。
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
whereには、タイプThingのプロパティがあります。run_blockRunBlock
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、それとも保持ループが発生するのでしょうか? ポインターは__weaktypedef のように既に定義されており、指定されたパラメーターは既に__weak.
^(__weak Thing *owner ...){ ... }
とは対照的に
^(Thing *owner, ...) { ... }
ありがとう!