1

ブロック内で self を呼び出す必要がある場合、通常は次のようにします。

__typeof(&*self) __weak weakSelf = self;

問題は、weakSelf.prop = @"string"ブロックで呼び出すと、セッターsetProp:が呼び出されないことです。

しかし、次のように定義すると:

__typeof(&*self) fakeSelf = self;

問題は解決しました。

誰でも理由を説明できますか?潜在的な問題はありますか?

4

1 に答える 1

5
  1. typeofC11 の一部であり、clang によって古い言語バージョンの拡張機能としてサポートされています。使用する必要はありません (実装は非公開)__typeof
  2. &*selfハッカーはもう必要ありません。clang はtypeof(self)しばらくの間 (v3.1、Xcode 4.4) からプレーンをサポートしています。
  3. weakself.prop = ...常に の同義語です[weakself setProp:...]。これは target を宣言しても変わりません__weak

アクセサーが呼び出されないという結論にどのように到達しますか?

ログ メッセージやブレークポイント ヒットを見逃す場合は、ターゲットweakSelfが既に割り当て解除されていて、変数が nil に設定されている可能性があります。もちろん、これにより、アクセサーが呼び出されなくなります。

于 2013-05-22T13:38:33.147 に答える