使用__typeof的弱自赋值解释
Explanation of weak self assignment using __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
。当超出作用域时,它会安全地丢弃强引用。
__typeof(self)
有利于可移植性,因为它没有绑定到特定的类,尽管如此,&*
技巧看起来肯定是多余的。就我所知,在C
和Objective-C
中,&*ptr
完全等同于ptr
。
然而,在其他类c语言(如C++
)中,这可能不成立,因为操作符可以重载,语义可能不像看起来那么简单。事实上,我已经在C++
应用程序中看到了&*
,特别是在处理迭代器时。我的猜测是,作者有C++
背景,这就是为什么他插入了多余的结构。
无论如何,我可能是错的,我希望听到一个更复杂的解释,如果有的话。
由于Objective-C方法中的self类型始终是指针类型,因此__typeof(&*self)即使在objective - c++中也是冗余的。__typeof(self)应该总是有效的
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 有人可以解释速记赋值运算符的实际工作原理吗?
- C++解释赋值中的花括号
- 使用__typeof的弱自赋值解释
- 解释c/c++中赋值时逗号的不寻常用法