-1

サーバーからデータを取得するメソッドがあります。ループ内でメソッドを数回呼び出しています。問題は、計測器を使用してメモリ割り当てを確認すると、各メソッド呼び出しでライブメモリが増加することです。ところで、私はARCを使用しています。 メモリ割り当て

-(NSArray*)callService
{
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL: serviceURL];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:requestData];
    [request setTimeoutInterval:30.0];
    NSURLResponse *response = NULL; 
    NSError *requestError = NULL;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSArray *array = [(NSArray*) [responseString JSONValue] autorelease];
    responseString=nil;
    return array;
}
4

3 に答える 3

0

問題は SBJSON パーサーにありました。私は iOS 5 を使用しているので、NSJSONSerialization を使用しましたが、魅力的に機能します。

NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];

JSONValue の代わりに

于 2012-07-06T10:55:25.510 に答える
0

サーバーからデータを取得するメソッドがあります。ループ内でメソッドを数回呼び出しています。

しないでください。1 つ呼び出し、応答を待ってから、次の呼び出しを行います。

編集1:

同期ロードは、クラスによって使用可能になった非同期ロード コードの上に構築されます。非同期読み込みシステムが、この読み込み要求専用に生成されたスレッドで URL 読み込みを実行している間、呼び出しスレッドはブロックされます。同期ロードを実行するために、呼び出し元のスレッドで特別なスレッド化や実行ループの構成は必要ありません。

この呼び出しが失敗するまでに数分かかる可能性があるため (特に iOS でセルラー ネットワークを使用している場合)、GUI アプリケーションのメイン スレッドからこの関数を呼び出さないでください。

于 2012-07-05T12:03:42.197 に答える
0

ゾンビをオン (スキーム設定) にしている場合は、Instruments でメモリ使用量をテストするときに必ずオフにしてください。NSDeallocateZombies のデフォルト設定は NO であるため、ゾンビはまったく削除されません。したがって、NSZombiesEnabled を NO (または同等のスキーム チェックボックス) に設定するか、オンのままにして NSDeallocateZombies を YES に設定します。

于 2012-07-05T13:12:40.157 に答える