这样做安全吗?
#define wvar __weak __auto_type
然后使用
wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
[_self.filterWithHeader toggleVisible];
}];
答案 0 :(得分:2)
<强>安全即可。关键部分是变量声明为__weak
。只要你将它用作self
的实例 - 而不是其他类 - 运行时并不关心编译器认为它是什么类型(在这种情况下,编译器会知道__auto_type
是正确的类型。)
还要记住,仅当self
直接或间接保留引用它的块时,才需要弱限定符。对于许多块,普通的旧self
对保留周期是安全的。
答案 1 :(得分:1)
是的,确实如此。您不会将任何引用存储到wvar中。如果您经常输入“__weak __auto_type”,这只是节省时间的一种方便方法:)