我可以安全地使用这个弱自我类型快捷方式吗?

时间:2017-08-16 20:31:56

标签: objective-c automatic-ref-counting weak-references

这样做安全吗?

#define wvar __weak __auto_type

然后使用

wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
    [_self.filterWithHeader toggleVisible];
}];

2 个答案:

答案 0 :(得分:2)

<强>安全即可。关键部分是变量声明为__weak。只要你将它用作self的实例 - 而不是其他类 - 运行时并不关心编译器认为它是什么类型(在这种情况下,编译器会知道__auto_type 正确的类型。)

还要记住,仅当self直接或间接保留引用它的块时,才需要弱限定符。对于许多块,普通的旧self对保留周期是安全的。

答案 1 :(得分:1)

是的,确实如此。您不会将任何引用存储到wvar中。如果您经常输入“__weak __auto_type”,这只是节省时间的一种方便方法:)