当我们需要在一个区块中调用self时,我们通常会这样做:
__typeof(&*self) __weak weakSelf = self;
问题是,当您在阻止中调用weakSelf.prop = @"string"
时,将永远不会调用setter setProp:
。
但如果你这样定义:
__typeof(&*self) fakeSelf = self;
问题解决了。
任何人都可以解释为什么?还有任何潜在的问题吗?
答案 0 :(得分:5)
typeof
是C11的一部分,并且作为clang的旧语言版本的扩展支持。无需使用(私有实施)__typeof
&*self
hackery。 clang支持普通typeof(self)
一段时间(v3.1,Xcode 4.4)。weakself.prop = ...
alway是[weakself setProp:...]
的同义词。声明目标__weak
时,这不会改变。你如何得出结论不会被称为访问者?
如果您错过了日志消息或断点,可能目标weakSelf
已被解除分配且变量设置为nil。这当然会阻止调用访问者。