优化uitableview性能

优化uitableview性能

ID:8979158

大小:38.50 KB

页数:4页

时间:2018-04-13

优化uitableview性能_第1页
优化uitableview性能_第2页
优化uitableview性能_第3页
优化uitableview性能_第4页
资源描述:

《优化uitableview性能》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、Safari、AppStore、iTunes、GameCenter⋯几乎所有自带的应用中都能看到它的身影,可见它的重要性。然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是tablecell中包含图片的情况时。实际上只要针对性地优化一下,这种问题就不会有了。有兴趣的可以看看LazyTableImages这个官方的例子程序,虽然也要从网上下

2、载图片并显示,但滚动时丝毫不卡。下面就说说我对UITableView的了解。不过由于我也是初学者,或许会说错或遗漏一些,因此仅供参考。首先说下UITableView的原理。有兴趣的可以看看《AboutTableViewsiniOS-BasedApplications》。UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。它内部包含0到多个UITableViewCell对象,每个tablecell展示各自的内容。当新cell需要被显示时,就会调用t

3、ableView:cellForRowAtIndexPath:方法来获取或创建一个cell;而不可视时,它又会被释放。由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。此外,UITableView还可以分为多个sections,每个区段都可以有自己的head、foot和cells。而在定位一个cell时,就需要2个字段了:在哪个section,以及在这个section的第几行。这在iOSSDK中是用NSIndexPath来表述的,UIKit为其添加了ind

4、exPathForRow:inSection:这个创建方法。其他诸如编辑之类的就不提了,因为和本文无关。介绍完原理,接下来就开始优化吧。1.使用不透明视图。不透明的视图可以极大地提高渲染的速度。因此如非必要,可以将tablecell及其子视图的opaque属性设为YES(默认值)。其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);图像的alpha值也应该为1,或者在画图时设为不透明。2.不要重复创建不必要的tablecell。前面说了,UITableView只需

5、要一屏幕的UITableViewCell对象即可。因此在cell不可见时,可以将其缓存起来,而在需要时继续使用它即可。而UITableView也提供了这种机制,只需要简单地设置一个identifier即可:3.staticNSString*CellIdentifier=@"xxx";4.UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];5.if(cell==nil){6.cell=[[

6、[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier]autorelease];}值得一提的是,cell被重用时,它内部绘制的内容并不会被自动清除,因此你可能需要调用setNeedsDisplayInRect:或setNeedsDisplay方法。勘误:只是在模拟器上测试如此,真机调试时没有这种bug。1.减少视图的数目。UITableViewCell包含了tex

7、tLabel、detailTextLabel和imageView等view,而你还可以自定义一些视图放在它的contentView里。然而view是很大的对象,创建它会消耗较多资源,并且也影响渲染的性能。如果你的tablecell包含图片,且数目较多,使用默认的UITableViewCell会非常影响性能。奇怪的是,使用自定义的view,而非预定义的view,明显会快些。当然,最佳的解决办法还是继承UITableViewCell,并在其drawRect:中自行绘制:2.-(void)drawRe

8、ct:(CGRect)rect{3.if(image){4.[imagedrawAtPoint:imagePoint];5.self.image=nil;6.}else{7.[placeHolderdrawAtPoint:imagePoint];8.}9.10.[textdrawInRect:textRectwithFont:fontlineBreakMode:UILineBreakModeTailTruncation];}不过这样一来,你会发现选中一行后,这个cell就变蓝了,其中的内容就被挡

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。