0

AppKitでは「representedObject」を使用できますNSViewController。このrepresentedObjectは通常ModelControllerまたはNSViewController 表示されるモデルに設定されます。これは、新しいpresentedObjectを設定するだけで、モデルの詳細がビューで更新されるため、バインディングでうまく機能しますが、iPhoneの場合は(UIKit、Cocoaバインディングは利用できません)、そのようなrepresentedObjectがないUIViewControllerので、ここで私が知りたいことがいくつかあります:-

  1. モデルをUIViewControllerにバインドするための最良の/推奨される方法は何ですか?できれば、多くのデータを維持したくないIBOutlets場合は、セッターを呼び出して、ビューに表示するために変更されたモデルデータを更新します。
  2. UIViewControllerの関連モデルをいつどのようにリリースする必要がありますか?
  3. -[UIViewController dealloc]、通常のiPhoneアプリケーションで呼び出されます。

UIViewControllerビューとモデルの間の座標が、同時に、必要のないときにモデルのロックを解除するように、いくつかのクラスを設計することを探しています。

TIA。

4

1 に答える 1

0

これが Cocoa バインディングの大きな問題です。非常に簡単な多くのことが隠されています。

保持カウントが 0 に達すると、dealloc が呼び出されます。他のコントローラーがそれを解放し、他の保持がない場合に発生するビュー コントローラーの場合。ルールに従ってメモリ管理を行っている場合は、これについて心配する必要はありません。

そのレベルの抽象化に進みたい場合は、モデル オブジェクトまたはモデル コントローラーのプロパティを作成します。プロパティを正しく使用し (常にself.model割り当てを受け取るために使用するように)、dealloc 実装でオブジェクトを解放し、 で nil に設定しviewWillUnloadます。プロパティはアクセサーを作成します。

不要な場合のモデルのリリースに関しては、上記で処理されます。考えすぎる必要はありません。大規模なデータ構造を作成している場合は、上記に加えて、それらを構築して破棄することを検討できますviewWillAppearviewWillDisappear

バインディングの場合よりも多くのコンセントとグルー コードが必要になります。しかし、バインディングを管理するためのコードを大幅に減らす必要があります。iPhone はそれほど強力ではないデバイスであることを忘れないでください。ユーザーはリソースをより大切にUIViewController扱う必要があります。API はそれを行う機会を与えてくれます。

于 2010-04-11T09:12:21.967 に答える