7

Webサービスを使用してサーバーからデータを取得するiPhoneアプリがあります。Webサービスへの各呼び出しをNSOperationサブクラスに入れて、スレッド化できるようにします。私の質問は、完成したNSOperationサブクラスから情報を返すための推奨される方法は何ですか。現在、メインメソッドの最後にNSNotificationを送信しており、NSOperationの完了を待機しているコードはすべて、通知をサブスクライブします。次に、NSNotificationWithName:Object:のオブジェクト部分を使用して、操作から情報を返します。

これを行うためのより良い方法があるかどうかはわかりませんでした。Key Value Codingについて聞いたことがあり、Key Value Observingを使用して、操作のisFinishedプロパティが変更されたことを検出できましたが、ベストプラクティスがわかりません。

また、アプリケーションがスレッドセーフであることを確認しようとしています。これは、メインメソッドの最後に通知が送信され、通知内のオブジェクトが使用されない限り、問題にはならないと思います。それが終了するので、スレッドで。

最後に、私は次のように通知を呼び出しています。

[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:[NSNotification notificationWithName:@"notificationName" object:dataObject] waitUntilDone:NO];
4

3 に答える 3

1

アプリケーションによって異なります。同時に実行する操作はいくつありますか? その結果どうしていますか?結果は集計されていますか、それともすぐに UI に表示する必要がありますか?

メイン スレッドでの通知の送信は、かなりの負荷がかかります。結果に対して何をしているかによっては、UI が詰まる可能性があります。設計の観点から、通知から送信されるオブジェクトは、監視クラスが知っておくべきものですか? 操作からモデル オブジェクトに変更を加え、代わりにコントローラー オブジェクトにそれらの変更を監視させる方が理にかなっている場合があります。

Key Value Observing を使用できますが、注意が必要です。オブザーバーは、変更が発生したのと同じスレッドで観察するため、isFinished を観察するときに UI を直接変更しないでください。

オブジェクトが操作によってのみ所有および使用されている場合は、はい、メインの最後に安全に送信できるはずです。通知により保持されます。

于 2009-08-19T04:39:16.603 に答える