-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

我有一个从服务器获取数据的方法。我在循环中多次调用该方法。

不要。呼叫一个,等待响应并呼叫下一个。

编辑1:

同步加载建立在类提供的异步加载代码之上。当异步加载系统在专门为此加载请求生成的线程上执行 URL 加载时,调用线程被阻塞。为了执行同步加载,调用线程中不需要特殊的线程或运行循环配置。

因为这个调用可能需要几分钟才能失败(特别是在 iOS 中使用蜂窝网络时),所以你永远不应该从 GUI 应用程序的主线程调用这个函数。

于 2012-07-05T12:03:42.197 回答
0

如果您有僵尸(方案设置),请确保在 Instruments 中测试内存使用情况时将其关闭。NSDeallocateZombies 的默认设置是 NO,所以僵尸根本不会被删除。所以要么将 NSZombiesEnabled 设置为 NO(或等效的方案复选框),要么保持打开但将 NSDeallocateZombies 设置为 YES。

于 2012-07-05T13:12:40.157 回答
0

问题出在 SBJSON 解析器上。因为我使用的是 iOS 5,所以我使用了 NSJSONSerialization,它就像一个魅力。

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

而不是 JSONValue

于 2012-07-06T10:55:25.510 回答