欢迎来到天天文库
浏览记录
ID:42584921
大小:57.81 KB
页数:13页
时间:2019-09-18
《优化iOS程序性能的二十五个方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、优化iOS程序性能的二十五个方法ARC(AutomaticReferenceCounting,自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。忘掉代码段结尾的release简直像记得吃饭一样简单。作者:ParadiseMayCry来源:ParadiseMayCry
2、2016-12-2811:23 收藏 分享 1.用ARC管理内存ARC(AutomaticReferen
3、ceCounting,自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动干预了。忘掉代码段结尾的release简直像记得吃饭一样简单。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。现在所有的iOS程序都用ARC了,这条可以忽略。2.在正确的地方使用reuseIdentifier一个开发中常见的错误就是没有给
4、UITableViewCells,UICollectionViewCells,甚至是UITableViewHeaderFooterViews设置正确的reuseIdentifier。为了性能最优化,tableview用tableView:cellForRowAtIndexPath:为rows分配cells的时候,它的数据应该重用自UITableViewCell。一个tableview维持一个队列的数据可重用的UITableViewCell对象。不使用reuseIdentifier的话,每显示一行
5、tableview就不得不设置全新的cell。这对性能的影响可是相当大的,尤其会使app的滚动体验大打折扣。自iOS6起,除了UICollectionView的cells和补充views,你也应该在header和footerviews中使用reuseIdentifiers。想要使用reuseIdentifiers的话,在一个tableview中添加一个新的cell时在datasourceobject中添加这个方法:staticNSString*CellIdentifier=@"Cell";UIT
6、ableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:CellIdentifierforIndexPath:indexPath];这个方法把那些已经存在的cell从队列中排除,或者在必要时使用先前注册的nib或者class创造新的cell。如果没有可重用的cell,你也没有注册一个class或者nib的话,这个方法返回nil。3.尽量把views设置为透明如果你有透明的Views你应该设置它们的opaque属性为YES。原因是
7、这会使系统用一个最优的方式渲染这些views。这个简单的属性在IB或者代码里都可以设定。Apple的文档对于为图片设置透明属性的描述是:(opaque)这个属性给渲染系统提供了一个如何处理这个view的提示。如果设为YES,渲染系统就认为这个view是完全不透明的,这使得渲染系统优化一些渲染过程和提高性能。如果设置为NO,渲染系统正常地和其它内容组成这个View。默认值是YES。在相对比较静止的画面中,设置这个属性不会有太大影响。然而当这个view嵌在scrollview里边,或者是一个复杂动画
8、的一部分,不设置这个属性的话会在很大程度上影响app的性能。你可以在模拟器中用DebugColorBlendedLayers选项来发现哪些view没有被设置为opaque。目标就是,能设为opaque的就全设为opaque!这里有一点需要注意,只要是有中文字符的Label,哪怕你设置成不透明,模拟器中这个Label依然会变红,这个猜测是字符绘制的时候出的问题,这个目前没找到好的解决方法。4.避免过于庞大的XIBiOS5中加入的Storyboards(分镜)正在快速取代XIB。然而XIB在一些场
9、景中仍然很有用。比如你的app需要适应iOS5之前的设备,或者你有一个自定义的可重用的view,你就不可避免地要用到他们。如果你不得不XIB的话,使他们尽量简单。尝试为每个Controller配置一个单独的XIB,尽可能把一个ViewController的view层次结构分散到单独的XIB中去。需要注意的是,当你加载一个XIB的时候所有内容都被放在了内存里,包括任何图片。如果有一个不会即刻用到的view,你这就是在浪费宝贵的内存资源了。Storyboards就是另一码事儿了,storyboard
此文档下载收益归作者所有