弱自赋值使用的解释

我在GitHub的REActivityViewController项目中发现了一行奇怪的代码,无法理解它。 它似乎避免将价值投射到它声明的确切类别,但我不知道为什么这是必要的。 我怀疑它是否对继承有重要意义。

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

__typeof(&*self) __weak weakSelf = self;

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

通过这样声明,我会更清楚地说明这一点......

id __weak weakSelf = self;

然后,我可以重新声明它是一个有力的参考。

REPocketActivity* __strong strongSelf = (REPocketActivity*)weakSelf;

然后我会在块中使用strongSelf 。 当它超出范围时,它会安全地删除强大的参考。


__typeof(self)对可移植性很好,因为它不绑定到特定的类,但是&*技巧看起来绝对是多余的。 据我所知,在C ,因此Objective-C&*ptr完全等同于ptr

然而,这可能不适用于其他类似C语言的语言,如C++ ,因为操作符可能会被重载,语义可能不像它看起来那么简单。 实际上,我已经看到&*已经在C++应用程序中,特别是在处理迭代器时。 我的猜测是作者拥有C++背景,这就是他插入冗余构造的原因。

无论如何,我可能是错的,我很乐意听到更复杂的解释,它有任何解释。


由于Objective-C方法中的self类型始终是指针类型,即使在Objective-C ++中,__typeof(&* self)也是多余的。 __typeof(self)应该始终有效。

链接地址: http://www.djcxy.com/p/71397.html

上一篇: Explanation of weak self assignment using

下一篇: Different Between SOAP url and REST url