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

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”,这只是一种节省时间的便捷方法 :)