2

myViewControllerをナビゲーションスタックにプッシュした後、myViewControllerのいくつかのフィールドに入力するいくつかのデータに対して単純なネットワーク要求を行います。このリクエストでメインスレッドをブロックしたくないので、を使用して作成しperformSelectorInBackgroundます。リクエストが戻ってきたらperformSelectorOnMainThread、UIを更新するために使用します。

このアプローチは、リクエストを破棄することを除いて正常に機能します。ユーザーがViewControllerをプッシュすると、ネットワークリクエストが開始され、ユーザーはすぐにView Controllerをポップして、アプリで他のことを実行するとします。この場合、ネットワーク要求は存在しないオブジェクトに戻ります。このケースをどのように処理できますか?

各リクエストにデリゲートがあり、レスポンスを処理する、より堅牢なネットワーク層を検討しました。このアーキテクチャを使用すると、View Controllerがポップされたときにデリゲートをゼロにすることができるため、要求が何も返されないという問題を回避できます。これが最善の方法かどうかはわかりません。

4

1 に答える 1

1

このリクエストでメインスレッドをブロックしたくないので、performSelectorInBackgroundを使用して作成します。

つまり、同期リクエストを作成しているのです。つまり、実行中のスレッドをブロックするリクエストです。その代わりに、たとえば、を使用してリクエストを非同期にし+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]ます。その後、メインスレッドを含め、好きなスレッドからリクエストを行うことができます。は必要ありません-performSelectorInBackground:。接続の状態が変わると、NSURLConnectionDelegateプロトコルを使用してデリゲートに通知されます。このように-cancelして、接続にメッセージを送信して接続を停止できます。

于 2012-11-29T15:16:34.613 に答える