我有一个表视图,我想以异步方式向每行下载一个图标图像(100x75)。到目前为止,我已经遵循了许多教程,但我似乎无法弄明白。我该怎么办?
是否有人建议使用标准NSURLConnection API执行此操作,还是应该使用其中一个可在线获取的类/库?如果是这样,你推荐什么?
当然,我需要快速,高效且不泄漏。我也不希望下载影响滚动。
谢谢!
答案 0 :(得分:1)
我能想到的两个选择:
(1)使用ASIHTTPRequest。
(2)一种自定义实现,它生成一个线程,您可以使用NSURL
/ NSData
的组合加载图像。加载图像后,使用performSelectorOnMainThread:withObject:
将其发送到主UI线程上的方法。
NSThread *t = [[NSThread alloc] initWithTarget:self selector:@selector(loadImage:) object:nil];
[t start];
[t release];
-(void) updateImage:(id) obj {
// do whatever you need to do
}
-(void) loadImage:(id) obj {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSURL *url = [NSURL URLWithString:@"imageurl"];
NSData *imageData = [[NSData alloc]initWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:imageData];
[imageData release];
[self performSelectorOnMainThread:@selector(updateImage:) withObject:data waitUntilDone:YES];
[pool release];
}
答案 1 :(得分:0)
我建议您使用ASIHTTPRequest。它简单而快速。
以下是文档的链接 - ASIHTTPRequest
修改强>
您只需要下载可见细胞的图像。 下面是一个样本:
- (void)loadContentForVisibleCells
{
NSArray *cells = [self.tableView visibleCells];
[cells retain];
for (int i = 0; i < [cells count]; i++)
{
...
// Request should be here
...
}
[cells release];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
{
if (!decelerate)
{
[self loadContentForVisibleCells];
}
}
无论如何,你需要编写很多代码才能让事情变得更好,更快。