在后台加载urlimage更快

在后台加载urlimage更快,image,uiimage,Image,Uiimage,我正在做一个教程,他们要求我将背景中的urlimage加载到uitableview。下面是我正在使用的代码,它的加载速度非常慢。有没有一个代码可以让它加载得更快 NSOperationQueue*backgroundQue=[[NSOperationQueue alloc]init] int websiteNumber=0; for (NSString* website in websites){ [backgroundQue addOperationWithBlock:^{

我正在做一个教程,他们要求我将背景中的urlimage加载到uitableview。下面是我正在使用的代码,它的加载速度非常慢。有没有一个代码可以让它加载得更快

NSOperationQueue*backgroundQue=[[NSOperationQueue alloc]init]

int websiteNumber=0;

for (NSString* website in websites){

    [backgroundQue addOperationWithBlock:^{
        NSURL* iconURL=[NSURL URLWithString:

        [NSString stringWithFormat:@"http://%@/favicon.ico", website]];

        NSURLRequest*request=[NSURLRequest requestWithURL:iconURL];

        NSData* loadData = [NSURLConnection
                            sendSynchronousRequest:request returningResponse:nil error:nil];

        if(loadData !=nil){
            UIImage* loadImage= [UIImage imageWithData:loadData];

            if(loadImage ==nil){
                return ;
            }

            [[NSOperationQueue mainQueue]addOperationWithBlock:^{
                [websiteIcons replaceObjectAtIndex:websiteNumber withObject:loadImage];

                [self.tableView reloadData];

            }];
        }
    }];
    websiteNumber++;

}

对。将异步样式与
NSURLConnection
一起使用。也就是说,实现委托方法

由于您似乎还需要发送一大堆请求,因此最好将连接和所有相关数据(如响应数据)封装到一个负责执行一个请求的类中

如果将此类设置为
NSOperation
的子类,则可以利用
NSOperationQueue
来控制同时活动的连接数

然而,实现正确可靠的连接类可能是一项具有挑战性的任务。因此,您可以寻找第三方库。还可以查看Apple提供的网络示例,尤其是
QHTTPOperation

为了使这个过程快速可靠,还有很多话要说。但是我建议从继承自
NSObject
的类的实现开始,比如说HTTPRequestOperation,它实现了两个NSURLConnection委托协议。具有start、cancel、isFinished、isCancelled和isExecuting属性/方法,以及连接完成时将调用的完成块(可能是属性),已被取消或失败。它看起来像一个NSOperation子类,但这不是必需的。您可以在需要时轻松地将其作为NSOperation的子类

完成块传递类型为
id
的参数结果,该结果是响应的主体数据或连接失败时的
NSError
对象。
cancel
方法必须是线程安全的——因为它可以从任何线程调用

首先,连接委托方法应安排在主线程上。稍后,您可以使用专用线程或
NSOperationQueue

我有一个简单的示例实现,它有170行代码,标题有20行。只是给你一个想法