0

私が現在取り組んでいるアプリケーションでは、一連のデータに対して 2 つの画面がある場合があります。1 つはリストで、もう 1 つはマップです。各画面には、独自のビュー コントローラーがあります。デフォルトの画面はリスト ビューであるため、View Controller が最初に読み込まれます。ただし、マップ画面がまだ表示されていなくても、他のマップ画面ビュー コントローラーも読み込まれ、セットアップされます (リスト画面ビュー コントローラーが使用する地理的なマップ関連データをカプセル化するため)。

ただし、ユーザーがその画面に切り替えるまで、マップ画面ビューコントローラーのペン先とビューをロードして初期化したくありません。

view以下のコードのように、マップ画面のビュー コントローラー内でプロパティ アクセサーをオーバーライドし、nib を遅延ロード/インスタンス化することに問題はありますか? (このviewプロパティは、マップ画面が表示される直前、マップ画面ビュー コントローラーのviewDidLoadメソッドが呼び出される直前までアクセスされません。) これがうまく機能することをテストしましたが、この方法で実行されるのを見たことがありません。

- (UIView *)view {
    if (!_view) {
        UINib *nib = [UINib nibWithNibName:@"MyNibName" bundle:nil];
        [nib instantiateWithOwner:self options:nil];
    }
    return _view;
}
4

1 に答える 1

1

これに対するより良い答えを見つけました。

私が作業しているコードは実際には私自身のものではなく、マップ画面のビュー コントローラーが実際には のサブクラスではなく、UIViewControllerサブクラス化NSObject(および独自のviewプロパティの追加) であることに気付きませんでした。

マップ画面のビュー コントローラを から実際に継承するように変更しUIViewController、 の指定されたイニシャライザを使用すると、プロパティにアクセスしたときinitWithNibName:bundle:に nib がデフォルトで遅延ロード/インスタンス化されます。view

したがって、私の質問に対する答えは次のとおりです。システム フレームワークを使用すれば、これらの問題に遭遇することさえありません。:)しかし、私のコードが実際のベストプラクティスパターンと一致しているようです。Apple のガイドラインと推奨事項については、こちら を参照してください

于 2012-12-14T00:14:29.117 に答える