1

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

__typeof(&*self) __weak weakSelf = self;

问题是,当你weakSelf.prop = @"string"在块中调用时,settersetProp:永远不会被调用。

但是如果你这样定义:

__typeof(&*self) fakeSelf = self;

问题解决了。

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

4

1 回答 1

5
  1. typeof是 C11 的一部分,并被 clang 支持为旧语言版本的扩展。无需使用(实现私有)__typeof
  2. 不再&*self需要骇客了。clang 有一段时间支持平原typeof(self)(v3.1,Xcode 4.4)。
  3. weakself.prop = ...总是 的同义词[weakself setProp:...]。这在声明目标时不会改变__weak

您如何得出不会调用访问器的结论?

如果您错过了日志消息或断点命中,则目标可能weakSelf已经被释放并且变量被设置为 nil。这当然会阻止访问器被调用。

于 2013-05-22T13:38:33.147 回答