在本地或实时服务器上,在模拟器NSURLConnection sendAsynchronousRequest给予响应速度快,但在设备中,它延迟响应

问题描述:

NSString * strURL = [NSString stringWithFormat:@“%@ action = getResForOffer & offerid =%@”,SERVER_URL,strOfferID];在本地或实时服务器上,在模拟器NSURLConnection sendAsynchronousRequest给予响应速度快,但在设备中,它延迟响应

NSURL *url = [NSURL URLWithString:[strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"GET"]; 

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    if (error) 
    { 
     NSLog(@"%@",error.description); 
    } 
    else 
    { 
     NSMutableArray * arrJsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

     NSLog(@"Json Data --> %@",arrJsonData); 

     if (arrJsonData.count) 
     { 

     } 
    } 
}]; 

这可能意味着您的应用程序的某些其他部分正在将主线程的运行循环延长一段时间。处理响应的代码在主线程(特别是主NSOperation队列)空闲之前无法运行。如果你的主线程忙于做其他事情 - 在NSOperation队列,主运行循环或主调度队列上工作 - 那么你的处理程序将不会开始运行,直到它完成。

请记住,iOS设备比模拟器慢很多,所以模拟器中快速的事情可能会在实际设备上花费很多时间。

我强烈建议使用仪器对您的应用程序(在设备上)进行时间剖析并查看在此期间它正在做什么,然后从那里开始。如果您看到明显的延迟,我怀疑您会很容易地发现问题。