1

次のように、ブロックを保持するオブジェクトへの参照を提供する方法でブロックを使用しようとしています。

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, ...) { ... }

ありがとう!

4

1 に答える 1

0

いいえ、__weakin parameters は関数型自体の一部ではありません。

typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);

と同じです

typedef void(^RunBlock)(Thing *block_owner, ThingFinishBlock finish);

__weakパラメータ内で重要なブロックを実装する場所です。

また、これが保持サイクルと関係があるとあなたが考える理由もわかりません。

于 2013-06-27T23:17:42.310 に答える