Я пытаюсь использовать блоки таким образом, что я предоставляю ссылку на объект, который сохраняет блок, следующим образом:
typedef void(^RunBlock)(__weak Thing *block_owner, ThingFinishBlock finish);
где Thing
имеет свойство run_block
типа RunBlock
.
Thing *thing = [Thing thingWithBlock^(Thing *owner, ThingFinishBlock finish) { ... }];
Вызов run_block
из 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, ...) { ... }
Спасибо!