これは安全ですか?この弱い自己自動タイプのショートカットを安全に使用できますか?
#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; 対 __weak __auto_type _self = self; 確かに私はそれをたくさん...ブロックをたくさん使っています。 – Renetik
はい、私はすでに、必ずしも必要というわけではなく、必要であればそう簡単に見えないことを発見しました。コンパイラは私に警告を与えていますが、100%信頼できるかどうかはわかりません。 – Renetik