3

私は最近、いくつかの Cocoa ベースのオープン ソース プロジェクトについて調査しました。多くのプログラムがawakeFromNibにすべての初期化コードを持ち、指定された初期化子をほとんど使用しないことがわかりました。私はそのようにすることに慣れています:

  • オーバーライドされた指定されたイニシャライザで: Nib 以外のものをすべて実行します。
  • in awakeFromNib: すべての Nib 関連の処理を行う

このアプローチは間違っていますか?

4

1 に答える 1

2

はい、正解です。すべての nib 関連は awakeFromNib メソッドで行う必要があります。それが呼び出された時点で、すでに nib からビューを初期化してロードしているので、すでにそれを構成して使用することができます。

イニシャライザに関しては、次の質問を確認してください: iOS: UIView サブクラス init または initWithFrame:?

指定された初期化子は、他のすべての初期化子が呼び出す必要があるものです。UIView とサブクラスは、ビューの作成方法に応じて、-initWithFrame: と -initWithCoder: という 2 つの初期化子を実際に持っているという点で、少し変わっています。ビューをコードでインスタンス化する場合は -initWithFrame: をオーバーライドし、ペン先からビューをロードする場合は -initWithCoder: をオーバーライドする必要があります。または、コードを 3 番目のメソッドに配置し、これらの両方の初期化子をオーバーライドして、3 番目のメソッドを呼び出すようにすることもできます。実際、多くの場合、これが推奨される戦略です。

于 2013-08-06T08:00:55.037 に答える