這是安全的嗎?我可以安全使用這種弱自動型自動快捷鍵嗎?
#define wvar __weak __auto_type
,然後使用
wvar _self = self;
_filterMenuItem = [self addMenuItem:@"Filter" :^{
[_self.filterWithHeader toggleVisible];
}];
這是安全的嗎?我可以安全使用這種弱自動型自動快捷鍵嗎?
#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」很多:)
是的,它也好多了 wvar _self = self; vs __weak __auto_type _self = self; 當然,我做了很多...我使用塊很多。 – Renetik
是的人我已經發現,它並不總是必需的,但它只是不容易看到如果需要或如果不是。編譯器給我的警告,但我不知道這是否100%可靠。 – Renetik