使用__typeof解释弱自我赋值

时间:2013-05-12 17:34:05

标签: c++ objective-c automatic-ref-counting weak-references typeof

我在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。当它超出范围时,它会安全地丢弃强引用。

2 个答案:

答案 0 :(得分:4)

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

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

无论如何,我可能错了,我希望听到一个更复杂的解释,它有任何。

答案 1 :(得分:0)

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