使用__typeof的弱自赋值解释

Explanation of weak self assignment using __typeof

本文关键字:赋值 解释 typeof 使用      更新时间:2023-10-16

我在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)有利于可移植性,因为它没有绑定到特定的类,尽管如此,&*技巧看起来肯定是多余的。就我所知,在CObjective-C中,&*ptr完全等同于ptr

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

无论如何,我可能是错的,我希望听到一个更复杂的解释,如果有的话。

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