我可以安全使用这种弱自动型自动快捷键吗?
问题描述:
这是安全的吗?我可以安全使用这种弱自动型自动快捷键吗?
#define wvar __weak __auto_type
,然后使用
wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
[_self.filterWithHeader toggleVisible];
}];
答
安全。关键部分是该变量被宣布为__weak
。只要你用它作为self
的实例 - 而不是某个其他类 - 运行时并不关心编译器认为它是什么类型(在这种情况下,编译器会知道__auto_type
是正确的类型)。
还请记住,弱限定符仅在self
直接或间接保留其引用的块时才需要。对于许多区块,普通旧self
从保留周期是安全的。
答
是的。你不会在wvar中存储任何参考。这只是一个方便的方式来节省一些时间,如果你键入“__weak __auto_type”很多:)
+0
是的,它也好多了 wvar _self = self; vs __weak __auto_type _self = self; 当然,我做了很多...我使用块很多。 – Renetik
是的人我已经发现,它并不总是必需的,但它只是不容易看到如果需要或如果不是。编译器给我的警告,但我不知道这是否100%可靠。 – Renetik