Eyt*_*tan 15 iphone cocoa-touch uikit ios
时间分析器显示我的应用程序中最耗时的操作是UITableViewCells从nib文件加载.其中最昂贵的是加载UITableViewCell4KB图像.
我UITableViewCell使用以下代码从nib 加载:
[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellPortrait" owner:self options:NULL];
cell = portraitCell;
self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)
有没有人比较过以编程方式创建视图或UITableViewCell从笔尖加载a之间的区别?
编辑:
我比较了UITableViewCell从笔尖重复加载和以编程方式创建视图的时间曲线.我的测试包括UITableViews在3-5秒的时间内交替两次约10次.在每个测试中,以UITableViewCell编程方式加载速度要快得多,速度提高2到6倍.
任何人都可以证实这些结果吗?
编辑:我更新了nib加载代码只加载nib文件一次,并使用缓存版本进行后续调用.
if (self.UITableViewPortaitNib == nil) {
self.UITableViewPortaitNib = [UINib nibWithNibName:@"UITableViewCellPortrait" bundle:[NSBundle mainBundle]];
}
self.UITableViewPortaitNib instantiateWithOwner:self options:NULL];
cell = portraitCell;
self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)
我还使用自动化仪器来创建更一致的运行,结果仍然建议以UITableViewCells编程方式加载比加载UITableViewCells笔尖更快.UITableViewCells从笔尖加载的平均运行时间约为90 UITableViewCell毫秒,而以编程方式创建的平均运行时间为50毫秒.
在iOS 5中并在WWDC 2011视频中提到,有一种使用UINib的新方法.您在viewDidLoad:方法中注册了nib,然后简化了tableView:cellForRowAtIndexPath:方法中的代码.这可能会为你加快速度(但我从未进行任何比较时间).
示例:在viewDidLoad:注册nib并保留对它的引用:
NSString *myIdentifier = @"ReusableCustomCell";
[self.reuseCustomCell registerNib:[UINib nibWithNibName:@"ReusableCustomCell" bundle:nil] forCellReuseIdentifier:myIdentifier];
Run Code Online (Sandbox Code Playgroud)
在你的tableView:cellForRowAtIndexPath:方法中只需要求单元格(无需检查nil,因为它保证在iOS5下返回一个单元格)并配置单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *myIdentifier = @"ReusableCustomCell";
ReusableCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier];
// Your configuration code goes here
cell.nameLabel.text = @"some text";
// ....
return cell;
}
Run Code Online (Sandbox Code Playgroud)
代码未经测试.如果这比单独使用UINib更快,我会感兴趣.
| 归档时间: |
|
| 查看次数: |
4176 次 |
| 最近记录: |