0

アクセサリのさまざまな状態を受信するリモートアプリを構築しています。電源状態のオン/オフ、音量状態5、イコライザー設定ジャズなどを受信して​​おり、これらの状態を選択または非選択の状態でUIにマップし、変更をアクセサリに送り返す以外に何もしません。

アプリのアーキテクチャについて:外部アクセサリフレームワークを使用してApple EADemoプロジェクト に示されているように、アプリはそのアクセサリに接続されています。UIは、sでいっぱいにカスタマイズされた繰り返しのない範囲内で構築されます。アプリを起動すると、データモデルクラスは例からすべての現在の状態を受け取り、これらの状態を前述のパターンの1つを使用してUI(UITableViewControllerではなくセル)に直接伝達する必要があります。これは、本物のリモートのように見えるスタンドアロンの1ページアプリになります。 UITableViewCellUIButtonEADSessionController

、デリゲート、およびKVO(Key-Value- observing NSNotification)について考えて、この特別なアプローチにこれらのパターンのどれを使用すべきかを理解しようとしていますか?

それらの1つを選択する理由についての回答と、実装方法についての簡単な説明をいただければ幸いです。あなたの答えがKVOである場合、私はこれまでこのパターンを使用したことがないので、もう少し洞察を与えてください。

4

1 に答える 1

1

それは本当に依存します。

最も緩く結合されたものは、NSNotificationとNSNotificationCenterを使用することです。これは、通知を投稿するインスタンスが必ずしもオブザーバーについての知識を持っているとは限らず、複数のオブザーバーが存在する可能性があるためです。

デリゲートパターンはもう少し厳密であり、通常、メッセージを受信するデリゲートオブジェクトは1つだけです。プロジェクト内のUITableViewControllerがメッセージを処理する唯一のインスタンスである場合(またはメッセージを他のコンポーネントに適切に伝播する場合)、それでも問題ありません。

KVOパターンには、より正確に設計された観測関係が必要です。KVOがどのように実装されているかを正確に管理する必要があります。また、KVOでは1対多の観察も可能です。KVOの欠点は、監視関係が動的で一時的なものである場合、これらのオブジェクトがどのように破棄されるかについてさらに注意を払う必要があることです。そうしないと、割り当て解除されたインスタンスに更新を送信するなど、多くのクラッシュが発生する可能性があります。

使用するためにサードパーティに配信されるライブラリで作業している場合は、おそらくNSNotificationが最初の選択肢になります。

于 2013-01-31T12:05:50.203 に答える