我正在使用一个tableview,它从文档目录中加载图像,创建一个缩略图并在tableview中显示它。但是,我遇到了一个问题:由于照片很大,使用相机拍摄时会变慢和崩溃。
我已经探索了几种解决方案,包括GCD,以便在后台线程中完成工作,但结果是一样的。所以,我想查看SDWebImage,但我不知道它是否也适用于本地文件,而不是这种情况下的Web图像。有人可以告诉我吗?如果没有,这个问题怎么解决了?是否有可以帮助解决此问题的API?
答案 0 :(得分:0)
这个问题不容易回答,因为问题被广泛提出但我会尽我所能。
首先,我通常会调度一个后台线程,如果我有昂贵的处理来阻止主线程,这是非常重要的。 我真的不知道为什么你没有使用正常的UIImageView来做你正在做的事情,但试着实现以下内容:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"YourCell";
MyCellClass *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[MyCellClass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
/*
Whatever Code you want
*/
NSArray* params =@[cell.myImageView, @"http://myfancyimages.com/image.png"];
[self performSelectorInBackground:@selector(loadEventImageWithParameters:) withObject:params];
return cell;
}
现在添加功能:
- (void) loadEventImageWithParameters:(id) parameters {
NSArray* params = [[NSArray alloc] initWithArray:(NSArray*)parameters];
NSURL *url = [NSURL URLWithString:[params objectAtIndex:0]];
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
UIImageView* theImageView = (UIImageView*) [params objectAtIndex:0];
[theImageView setImage:image];
}
如果你有很多图片要加载,你最好排队你的进程,这样你就不会用Grand Central Dispatch“窃取”所有资源。 请阅读这篇优秀的帖子http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial以获取更多详细信息。
希望有所帮助