Luk*_*uke 16 uitableview ios cgrectmake
我有一个UITableView,在200个部分中有大约400个单元格,并且在响应用户交互(滚动,选择单元格)时有点迟钝.我已经确保检索单元格和标题视图的方法在运行时最小化,并且我不认为我做任何与众不同的事情让它变慢.单元格和标题只有一个背景图像和文本.有没有其他人有这样的问题,你知道有什么办法让它运行得更快一点吗?
编辑:我正在提供赏金,因为我很想得到一些有用的反馈.我不认为答案在于我的代码中的问题.相反,我正在寻找重新设计UITableView的策略,以便它运行得更快.我完全愿意添加新代码,我期待听到你们要说的话.
在模拟器和我的设备(iPhone 4)上都观察到了低迷.这是我的实现viewForHeaderInSection和cellForRowAtIndexPath,这是唯一UITableViewDelegate实现非常重要的方法.我正在重用单元格和标题视图.
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section
{
HaikuHeaderView* view= [m_sectionViews objectAtIndex:section];
NSMutableArray* array= [m_haikuSearch objectAtIndex:section];
Haiku* haiku= [array objectAtIndex:0];
[view.poetLabel setText:[haiku nameForDisplay]];
return view;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
cell.backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell gradient2.png"]];
// (Set up a bunch of label attributes in the cell...)
}
NSMutableArray* array= [m_haikuSearch objectAtIndex:indexPath.section];
Haiku* haiku = [array objectAtIndex:indexPath.row];
cell.textLabel.text = [haiku.m_lines objectAtIndex:0];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
Eik*_*iko 49
即使您的单元格实际上非常简单(背景图像和标签),也需要考虑一些事项
图像缓存 这是显而易见的事情 - 如果您在任何地方使用相同的图像,请将其加载到UIImage中并重复使用它.即使系统将自己缓存它,直接使用已经加载的系统也不应该受到伤害.
快速计算 另一个相当明显的事情 - 尽可能快地计算高度和内容.不要进行同步提取(网络调用,磁盘读取等).
图像中 的Alpha通道绘制时的价格是透明的.由于您的单元格背景背后没有任何内容,请确保在没有Alpha通道的情况下保存图像.这节省了大量的处理.
透明标签 对于背景视图顶部的标签也是如此,不幸的是,使其不透明可能会破坏单元格的外观 - 但这取决于图像.
自定义单元格
通常,子类化UITableViewCell和实现drawRect:自己比构建子视图层次结构更快.您可以使图像成为所有实例使用的类变量.在drawRect:你绘制图像和文本顶部.
检查合成 模拟器有一个工具来突出显示由于透明度而渲染成本昂贵的部分(绿色正常,红色是alpha混合).它可以在调试菜单中找到:"Color Blended Layers"
如果您希望加快代码速度,那么您可以做的最好的事情就是对其进行分析.有两个原因:
你可以阅读一些通常可以提高表性能的东西,比如使用固定高度的单元格和重复使用单元格,它可能有助于实现这些东西(看起来你已经这样做了).但是,当涉及到加快你的代码,你真的需要知道你的应用程序花费其大部分时间.可能有一些方法需要很长时间,或者方法相对较快但被调用的次数比您预期的要多得多.
除非你有一些数字需要衡量,否则我们无法知道你为加快速度而做出的改变是否真正有所作为.如果您可以证明您的代码在一个例行程序中花费了80%的时间并且将其降低到35%,那么您就知道自己正在取得进步.
因此,打破仪器并开始测量.如果可以,最好在进行每项不同的活动时进行测量,以便加速...在滚动时进行一次性能分析,一次在固定时间内选择尽可能多的不同单元格等等.不要忘记保存结果,以便稍后进行比较.
| 归档时间: |
|
| 查看次数: |
10510 次 |
| 最近记录: |