我有一个从服务器获取数据的方法。我在循环中多次调用该方法。问题是当我使用仪器检查内存分配时,我在每个方法调用中增加了实时内存。顺便说一下,我正在使用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;
}
答案 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