获取服务器数据的方法的内存分配增长

时间:2012-07-05 11:59:36

标签: ios memory-management memory-leaks instruments

我有一个从服务器获取数据的方法。我在循环中多次调用该方法。问题是当我使用仪器检查内存分配时,我在每个方法调用中增加了实时内存。顺便说一下,我正在使用ARC。 Memory Allocation

-(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;
}

3 个答案:

答案 0 :(得分:0)

  

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

<强>不即可。拨打一个电话,等待响应并拨打下一个电话。

修改1:

  

同步加载建立在异步之上   加载类提供的代码。调用线程是   异步加载系统执行URL加载时阻止   专门为此加载请求生成的线程。没特别   在调用线程中必须进行线程或运行循环配置   为了执行同步加载。

     

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

答案 1 :(得分:0)

如果你有僵尸(方案设置),请确保在使用仪器进行内存使用测试时关闭它们。 NSDeallocateZombies的默认设置为NO,因此根本不会删除僵尸。因此要么将NSZombiesEnabled设置为NO(或等效的方案复选框),要么保持打开但将NSDeallocateZombies设置为YES。

答案 2 :(得分:0)

问题在于SBJSON解析器。由于我使用的是iOS 5,我使用的是NSJSONSerialization,它就像一个魅力。

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

而不是JSONValue