私は最近、いくつかの Cocoa ベースのオープン ソース プロジェクトについて調査しました。多くのプログラムがawakeFromNibにすべての初期化コードを持ち、指定された初期化子をほとんど使用しないことがわかりました。私はそのようにすることに慣れています:
- オーバーライドされた指定されたイニシャライザで: Nib 以外のものをすべて実行します。
- in awakeFromNib: すべての Nib 関連の処理を行う
このアプローチは間違っていますか?
私は最近、いくつかの Cocoa ベースのオープン ソース プロジェクトについて調査しました。多くのプログラムがawakeFromNibにすべての初期化コードを持ち、指定された初期化子をほとんど使用しないことがわかりました。私はそのようにすることに慣れています:
このアプローチは間違っていますか?
はい、正解です。すべての nib 関連は awakeFromNib メソッドで行う必要があります。それが呼び出された時点で、すでに nib からビューを初期化してロードしているので、すでにそれを構成して使用することができます。
イニシャライザに関しては、次の質問を確認してください: iOS: UIView サブクラス init または initWithFrame:?
指定された初期化子は、他のすべての初期化子が呼び出す必要があるものです。UIView とサブクラスは、ビューの作成方法に応じて、-initWithFrame: と -initWithCoder: という 2 つの初期化子を実際に持っているという点で、少し変わっています。ビューをコードでインスタンス化する場合は -initWithFrame: をオーバーライドし、ペン先からビューをロードする場合は -initWithCoder: をオーバーライドする必要があります。または、コードを 3 番目のメソッドに配置し、これらの両方の初期化子をオーバーライドして、3 番目のメソッドを呼び出すようにすることもできます。実際、多くの場合、これが推奨される戦略です。