开头语:今天看了苹果的LazyTableImages的demo,记录一下处理方法。
@import UIKit;
这句话系统自动帮你将UIKit导入Build Phases中Link Binary With Libraries中。- 让一个数组中的所有元素去执行相同的方法时除了使用 for loop 语法之外 还可以使用
makeObjectsPerformSelector:
这个方法。拓展:在Swift中enumerateObjectsUsingBlock:
来代替。eg:
NSArray *allDownloads = [self.imageDownloadsInProgress allValues];
[allDownloads makeObjectsPerformSelector:@selector(cancelDownload)];
3.苹果官方优化思想是在当前tableView处于滑动状态时不去加载图片,不滑动时再去加载。
在tableView初始化cell时添加一层当前tableView的状态判断,如果当前cell中的imageView已经加载到图片,那么就直接加载,否则等tableView不滑动时再去加载。
//图片不存在
if (!appRecord.appIcon)
{
if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
{
//去加载图片
}
// 暂缓加载,先用背景图片显示
cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];
}
else//图片存在,则直接加载
{
cell.imageView.image = appRecord.appIcon;
}
然后就是在UIScrollViewDelegate中监听
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
//加载图片
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//加载当前正展示cell的图片
}