c++ - 使用 __typeof 弱自赋值的解释

标签 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;

然后在 block 中我可以将其重新声明为强引用。

REPocketActivity* __strong strongSelf = (REPocketActivity*)weakSelf;

然后我会在代码块中使用 strongSelf。当它超出范围时,它会安全地删除强引用。

最佳答案

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

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

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

关于c++ - 使用 __typeof 弱自赋值的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16510198/

相关文章:

C++:定义类的最大/最小限制

iphone - Objective-C 术语 : outlets & delegates

objective-c - 以编程方式与 charles 代理服务器 HTTP 请求和响应通信

ios - 是否可以调试 "Terminated due to memory error"?

c++ - 为什么大型本地数组会使我的程序崩溃,而全局数组却不会?

C++ string.compare()

objective-c - 之间的实际差异 - (IBAction)pushClear :(id)sender and - (IBAction)pushClear:(NSButton)sender

objective-c - 关于自动引用计数,我需要了解什么?

ios - Objective-C 和 ARC?用还是不用?

与枚举匹配的模板函数中的 C++ 无法解释的变化