在块中调用weakSelf时未调用Setter

时间:2013-05-22 13:23:35

标签: objective-c objective-c-blocks

当我们需要在一个区块中调用self时,我们通常会这样做:

__typeof(&*self) __weak weakSelf = self;

问题是,当您在阻止中调用weakSelf.prop = @"string"时,将永远不会调用setter setProp:

但如果你这样定义:

__typeof(&*self) fakeSelf = self;

问题解决了。

任何人都可以解释为什么?还有任何潜在的问题吗?

1 个答案:

答案 0 :(得分:5)

  1. typeof是C11的一部分,并且作为clang的旧语言版本的扩展支持。无需使用(私有实施)__typeof
  2. 不再需要&*self hackery。 clang支持普通typeof(self)一段时间(v3.1,Xcode 4.4)。
  3. weakself.prop = ... alway是[weakself setProp:...]的同义词。声明目标__weak时,这不会改变。
  4. 你如何得出结论不会被称为访问者?

    如果您错过了日志消息或断点,可能目标weakSelf已被解除分配且变量设置为nil。这当然会阻止调用访问者。