0

私は次のように進行するプログラムを持っています。と呼ばれるメソッドを呼び出しgetCharacteristicsます。このメソッドは、NSURL接続(すべてのネットワークコードは別のファイルで実行されます)を介してリモートサーバーに接続し、応答を受信すると、元のクラスへのメソッド呼び出しを行います。次に、この元のクラスはデータ(xml)を解析し、その内容をマップとして保存します。

私が抱えている問題は、このトランザクションのどこかで別のスレッドが生成されているように見えることです。

これが私がしていることを示すサンプルコードです:

@property map

- (void) aMethod
{
    [[WebService getSingleton] callWebService: andReportBackTo: self]
    Print "Ready to Return"
    return map;
}
- (void) methodThatIsReportedBackToAfterWebServiceRecievesResponse
{
    //Parse data and store in map
    Print "Done Parsing"
}

私が遭遇している問題は、マップが完全に作成される前に返されることです。さらに、「Ready to Return」は「Doneparsing」の前に印刷されており、複数のスレッドが動作していることを示唆しています。私は正しいですか?もしそうなら、それを機能させるための最良の方法は単純なロックでしょうか?

4

1 に答える 1

1

非同期で実行するように指示すると、NSURLConnection は別のスレッドで実行されます。

私の意見では、これに対処する最善の方法は、独自の委任プロトコルを作成し、データをダウンロードして解析したときに委任を使用してマップを返すことです。

NSURLConnection を使用して同期的にデータを取得することはできますが、特に接続タイムアウトが発生した場合、ユーザーを長時間待たせることがあります。私はこのアプローチを避けます。

于 2012-05-22T20:41:35.337 に答える