使用__typeof解释弱自我赋值

Bre*_*nan 7 c++ weak-references typeof objective-c automatic-ref-counting

我找到的代码在GitHub上REActivityViewController项目的奇数行和无法理解这一点.它似乎避免将值转换为声明它的确切类,但我不知道为什么这是必要的.我想知道它对继承是否有点重要.

任何人都可以解释为什么会这样做?

__typeof(&*self) __weak weakSelf = self;
Run Code Online (Sandbox Code Playgroud)

https://github.com/romaonthego/REActivityViewController/blob/master/REActivityViewController/REPocketActivity.m

通过这种方式宣布,我会更清楚地说明这一点......

id __weak weakSelf = self;
Run Code Online (Sandbox Code Playgroud)

然后在块内我可以重新声明它作为一个强大的参考.

REPocketActivity* __strong strongSelf = (REPocketActivity*)weakSelf;
Run Code Online (Sandbox Code Playgroud)

然后我会strongSelf在块内使用.当它超出范围时,它会安全地丢弃强引用.

Gab*_*lla 4

__typeof(self)有利于可移植性,因为它没有绑定到特定的类,尽管如此,这个&*技巧看起来绝对是多余的。据我所知, in C,因此Objective-C&*ptr完全等同于ptr

然而,这在其他类 C 语言(例如 )中可能并不成立C++,因为运算符可以重载并且语义可能不像看起来那么简单。事实上,我已经&*C++应用程序中看到了这一点,尤其是在处理迭代器时。我的猜测是作者有C++背景,这就是他插入冗余结构的原因。

不管怎样,我可能是错的,我很想听到更复杂的解释,如果有的话。