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