我在GitHub上的REActivityViewController项目中发现了一行奇怪的代码,看不懂。它似乎避免将值强制转换为它声明为的确切类,但我不知道为什么有必要这样做。我想知道它对继承是否重要。
谁能解释一下为什么要这样做?
__typeof(&*self) __weak weakSelf = self;
我会通过这样声明来使它更清楚...
id __weak weakSelf = self;
然后在 block 中我可以将其重新声明为强引用。
REPocketActivity* __strong strongSelf = (REPocketActivity*)weakSelf;
然后我会在代码块中使用 strongSelf
。当它超出范围时,它会安全地删除强引用。
最佳答案
__typeof(self)
有利于可移植性,因为它没有绑定(bind)到特定的类,但是 &*
技巧看起来绝对是多余的。据我所知,在 C
和 Objective-C
中,&*ptr
完全等同于 ptr
.
但是,这在其他类 C 语言(例如 C++
)中可能并不成立,因为运算符可能会被重载,并且语义可能不像看起来那么简单。事实上,我已经在 C++
应用程序中看到 &*
了,尤其是在处理迭代器时。我的猜测是作者有 C++
背景,这就是他插入冗余结构的原因。
无论如何,我可能是错的,我很乐意听到更复杂的解释,如果有的话。
关于c++ - 使用 __typeof 弱自赋值的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16510198/