上記のコメントはいくつかの考えを要約していると思いますが、私はいくつかの考えを追加したかっただけです。
これらのビューコントローラーのいずれかが現在のアイテムを設定すると([myClass setCurrentItem:(MyItem *)item] UIなどを更新できるように、すべてのビューコントローラーに通知したい...
これは、表示されていない場合でも、すべてのUIViewControllerを更新していることを意味します。開発しているプラットフォームについては明記していませんが、一般的には、コントローラーを絶対に必要な場合(つまり、ユーザーに表示されている場合)にのみ更新することを目指しています。この場合、ロジックを挿入したり、モデル(つまり、)をチェックしたり、ビューを適切に更新しviewWillAppear:
たりするオプションがあります。viewDidAppear:
NSMutableArray
さて、NSNotificationsを使用するか、プロトコルメソッドとデリゲートを使用するかという問題は難しい問題です。考慮すべきことがいくつかあると思います。
- クラスを所有または管理する単一のオブジェクトがありますか?一般的に、これは代理人に適しています-
UITableView
たとえば、考えてみてください。
- 単一のオブジェクトがイベントにメソッドを実装する必要があることを確認しますか?プロトコルは、メソッドが実装されていることを確認し、ドキュメントを明確にすることができます。
それ以外の場合、通知は非常に便利です。標準のフレームワークを見て、それらからガイダンスを受け取りますが、それの多くは単なる判断の呼びかけであることに気づきます。UITextField
たとえば、を見てくださいUITextFieldDelegate
。プロトコルを使用しますが、通知も作成します。大きな理由があると思いますが、おそらくそれについて考えるのに少し時間を費やす必要があるでしょう...
編集:あなたが言及するように、完全を期すために:
2.)iVarが設定されている場合は、NSNotificationセンターを使用してこの通信を行います。
Key-Value Observing(KVO)を使用すると、オブジェクトインスタンス変数を使用して通知を直接登録できます。
iOS 5.1のドキュメントから:
Key-Value監視は、別のオブジェクトのプロパティが変更されたときにオブジェクトに直接通知できるようにするメカニズムです。Key-Valueの監視(またはKVO)は、アプリケーションのまとまりの重要な要素になる可能性があります。これは、Model-View-Controllerデザインパターンに準拠して設計されたアプリケーション内のオブジェクト間の通信モードです。たとえば、これを使用して、モデルオブジェクトの状態をビューおよびコントローラレイヤーのオブジェクトと同期させることができます。通常、コントローラーオブジェクトはモデルオブジェクトを監視し、ビューはコントローラーオブジェクトまたはモデルオブジェクトを監視します。
ドキュメントへのリンクを追加しますが、現時点ではブックマークを持っていません。