3

inputAccessoryViewのカスタムサブクラスの1つに使用しています。UIViewControllerこれは、サブクラスUIResponderです。

状態に関するAppleDeveloperClass Reference-[UIResponder inputAccessoryView]

システム提供の入力ビュー(キーボードなど)またはカスタム入力ビュー(プロパティで指定するビュー)のいずれかにカスタムコントロールをアタッチするサブクラスは、inputView[ inputAccessoryView]プロパティを再宣言readwriteし、それを使用してカスタムアクセサリビューを管理する必要があります。 。

  1. 再宣言した後inputAccessoryView、私はそれをしなければなりません@synthesizeか?そうすることがそれをコンパイルする唯一の方法のように思えたが、inputAccessoryView私は自分自身を合成するのではなく、Appleのivarを使いたい。
  2. inputAccessoryViewとして再宣言できますnonatomicか?
  3. inputAccessoryViewとして再宣言できない場合は、スレッドセーフを維持するために、nonatomic常にivarに直接アクセスするのではなく、プロパティを介してinputAccessoryViewアクセスする必要がありますか?self.inputAccessoryView
4

1 に答える 1

2
  1. はい、UIResponder がsetInputAccessoryView:メソッドを公開しない限り、プロパティのセッターを自分で提供する必要があります。基礎となる ivar にアクセスできる場合は、それを設定する setInputAccessoryView: メソッドを自分で作成できます。ただし、この場合はアクセスできないため、自分で作成する必要があります。

  2. 私はそうは思わない; これは、スーパークラス宣言と互換性がありません。

  3. nonatomic非メイン スレッドから UIKit で (ほぼ) 何かを呼び出すことは無効であるため、このプロパティが ではない理由がわかりません。特に、このプロパティは であり、setter が非メイン スレッドで s を安全にUIView保持および解放する方法はありません。UIView

    つまり、setter がバックグラウンド スレッドから呼び出されている場合、コードはどちらの方法でも壊れています。メインスレッドからのみ呼び出される場合は、ivar に直接アクセスできます。したがって、ivar に直接アクセスできない理由はありません。

于 2011-11-19T15:27:06.980 に答える