ブロック内で self を呼び出す必要がある場合、通常は次のようにします。
__typeof(&*self) __weak weakSelf = self;
問題は、weakSelf.prop = @"string"
ブロックで呼び出すと、セッターsetProp:
が呼び出されないことです。
しかし、次のように定義すると:
__typeof(&*self) fakeSelf = self;
問題は解決しました。
誰でも理由を説明できますか?潜在的な問題はありますか?
ブロック内で self を呼び出す必要がある場合、通常は次のようにします。
__typeof(&*self) __weak weakSelf = self;
問題は、weakSelf.prop = @"string"
ブロックで呼び出すと、セッターsetProp:
が呼び出されないことです。
しかし、次のように定義すると:
__typeof(&*self) fakeSelf = self;
問題は解決しました。
誰でも理由を説明できますか?潜在的な問題はありますか?
typeof
C11 の一部であり、clang によって古い言語バージョンの拡張機能としてサポートされています。使用する必要はありません (実装は非公開)__typeof
&*self
ハッカーはもう必要ありません。clang はtypeof(self)
しばらくの間 (v3.1、Xcode 4.4) からプレーンをサポートしています。weakself.prop = ...
常に の同義語です[weakself setProp:...]
。これは target を宣言しても変わりません__weak
。アクセサーが呼び出されないという結論にどのように到達しますか?
ログ メッセージやブレークポイント ヒットを見逃す場合は、ターゲットweakSelf
が既に割り当て解除されていて、変数が nil に設定されている可能性があります。もちろん、これにより、アクセサーが呼び出されなくなります。