NSURLConnection与线程异步完成但仍然冻结UI

时间:2012-07-01 22:55:57

标签: ios5 nsurlconnection nsurlrequest

我已经采用了iOS应用程序并且遇到了异常请求问题。

我们有一个WebService类,它具有以下代码;

// create the request
NSURLRequest* request=[NSURLRequest requestWithURL:url
                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                       timeoutInterval:30.0];

self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (self.connection) {
  self.receivedData = [NSMutableData data];
} else {

这在背景线程中看起来像是非常香草的NSURLRequest。但是,一旦这个调用结束,它就冻结了UITableViewController。也许我误解了应该发生的事情,但似乎它应该能够滚动表格视图。上面的代码有什么问题吗?我正在调试的一种可能性是我使用SDWebImage来缩减缩略图并且冻结可能是由于下载了所述图像,但我认为这将发生在后台线程中。如果上面的NSURLRequest阻塞了主线程并且有什么方法可以验证我可以验证SDWebImage是否是罪魁祸首?

THX

1 个答案:

答案 0 :(得分:0)

这种情况的典型模式是创建请求。将self设置为委托并处理委托方法中的响应,如下所示:

-(void)someMethod
{
     NSURLRequest* request=[NSURLRequest requestWithURL:url
         cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
     self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
     if(statusCode == 200) // or whatever makes sense in your situation.
         self.receivedData = [NSMutableData data];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [requestData appendData:data];
}

或者其他一些......但是后来我不知道你在哪里调用所有这些东西...而且你似乎在同一个方法中做了两个,这可能是也可能不是连接:didReceiveResponse。