我可以安全地使用这个弱自自动类型的快捷方式吗?
Can I safely use this weak self auto type shortcut ?
这样做安全吗?
#define wvar __weak __auto_type
然后是用法
wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
[_self.filterWithHeader toggleVisible];
}];
安全。关键部分是变量声明为__weak
。只要您随后将它用作 self
的实例——而不是其他 class 的实例——运行时不关心编译器认为它是什么类型(在这种情况下,编译器就会知道 __auto_type
是 正确的类型)。
还请记住,仅当 self
直接或间接保留引用它的块时才需要弱限定符。对于许多块,普通旧 self
不受保留周期的影响。
是的,是的。您不会将任何引用存储到 wvar 中。如果您经常输入“__weak __auto_type”,这只是一种节省时间的便捷方法 :)
这样做安全吗?
#define wvar __weak __auto_type
然后是用法
wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
[_self.filterWithHeader toggleVisible];
}];
安全。关键部分是变量声明为__weak
。只要您随后将它用作 self
的实例——而不是其他 class 的实例——运行时不关心编译器认为它是什么类型(在这种情况下,编译器就会知道 __auto_type
是 正确的类型)。
还请记住,仅当 self
直接或间接保留引用它的块时才需要弱限定符。对于许多块,普通旧 self
不受保留周期的影响。
是的,是的。您不会将任何引用存储到 wvar 中。如果您经常输入“__weak __auto_type”,这只是一种节省时间的便捷方法 :)