一般来说,您可以做一些事情来获得更好的表格视图性能:
1)切换到 Loren Brichter 绘制 UITableViewCell 的方法(因为缺少更好的链接:http ://www.therefinedgeek.com.au/index.php/2010/12/21/fast-scrolling-uitableview-updates-for- ios-4-2/ )
基本上,他的代码所做的就是将所有单元格内容呈现为一个不透明的 UIView,UITableView(和 CoreGraphics)可以非常快速地爆炸到 UITableViewCell
如果您不想在 drawRect: 中完成所有单元格设计,您仍然可以使用 nib,但是:
- 确保每个子视图都标记为不透明
- 没有任何透明/半透明的子视图
- 没有任何带有 alpha 通道的图像!= 1.0f。
2)不要让 UIImageView 做任何缩放来显示你的图像,给它一个正确大小的 UIImage
3) 如果您使用的是 iOS 5 及更高版本,您可以为特定的单元格标识符注册一个 nib。这样,当您调用 [tableView dequeueReusableCellWithIdentifier:] 时,您一定会得到一个单元格。单元分配更快(根据 Apple 的说法),并且您可以编写更少的代码:
- (void)viewDidLoad {
UINib *nib = [UINib nibWithNibName:@"MyCell" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"MyCellIdentifier"];
}
// ...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// Commented out code is no longer needed
//if (cell == nil) {
// cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
//}
// setup cell
return cell;
}
4) 显示从网上下载的图像
- 显示默认图像(下载真实图像时要查看的内容)
- 在单独的线程上开始下载(提示:使用 GCD 的 dispatch_async())
- 当图像进来时,缓存它(提示:NSCache),并显示在单元格上
- 将所有图像下载/缓存在主线程之外;您应该在主线程上做的唯一一件事就是设置图像(记住 UI 代码必须在主线程上!)
您可能想要编写一个支持异步的 UIImageView(或使用现有库)。
远离 EGOImageView,即使它具有异步下载功能,它也会在主线程上进行缓存查找(恰好在磁盘上,这意味着昂贵的磁盘 IO),然后再分派到后台线程进行下载。我曾经使用它,但最终我编写了自己的一组类来处理这个问题,而且速度明显更快。
-
只要按照这些,以及其他人在这里写的东西,你就会有像玻璃一样滚动的表格视图:)