iOS应用程序性能的提示和技巧(中)
作者:网络转载 发布时间:[ 2013/5/10 10:36:51 ] 推荐标签:
18) 降低Web内容的影响
UIWebView非常有用。用它可以很容易的显示web内容,甚至可以构建UIKit空间难以显示的内容。
不过,你可以能已经注意到程序中使用的UIWebView组建没有苹果的Safari程序快。这是因为JIT编译限制了WebKit的Nitro引擎的使用。
因此为了获得更加的性能,需要调整一下HTML的大小。首先是尽量的摆脱JavaScript,并避免使用大的矿建,例如jQuery。有时候使用原始的JavaScript要比别的框架快。
另外,尽量的异步加载JavaScript文件——特别是不直接影响到页面行为时,例如分析脚本。
后——让使用到的图片,跟实际需要的一样大小。如之前提到的,尽量使用sprite sheets,以此节省内存和提升速度。
更多相关信息,可以看一下: WWDC 2012 session #601 – 在iOS中优化UIWebView和网站中的Web内容。
19) 设置阴影路径
如果需要在view活layer中添加一个阴影,该如何处理呢?
大多数开发者首先将QuartzCore框架添加到工程中,然后添加如下代码:
#import <QuartzCore/QuartzCore.h> // Somewhere later ...UIView *view = [[UIView alloc] init]; // Setup the shadow ...view.layer.shadowOffset = CGSizeMake(-1.0f, 1.0f);view.layer.shadowRadius = 5.0f;view.layer.shadowOpacity = 0.6;
看起来非常容易,不是吗?
然而不幸的是上面这种方法有一个问题。Core Animation在渲染阴影效果之前,必须通过做一个离屏(offscreen)才能确定view的形状,而这个离屏操作非常耗费资源。
下面有一种方法可以更容易的让系统进行阴影渲染:设置阴影路径!
view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];
通过设置阴影路径,iOS不用总是再计算该如何绘制阴影了。只需要使用你预先计算好的路径即可。有一点不好的是,根据view的格式,自己可能很难计算出路径。另外一个问题是当view的frame改变时,必须每次都更新一下阴影路径。
如果你想了解更多相关信息,Mark Pospesel写了一篇很棒的文章:shadowPath。
20) 优化TableView
Table views需要快速的滚动——如果不能的话,用户会感觉到停顿。
为了让table view平滑的滚动,确保遵循了如下建议:
设置正确的reuseIdentifer以重用cell。
尽量将view设置为不透明,包括cell本身。
避免渐变,图像缩放以及离屏绘制。
如果row的高度不相同,那么将其缓存下来。
如果cell显示的内容来此网络,那么确保这些内容是通过异步来获取的。
使用shadowPath来设置阴影。
减少subview的数量。
在cellForRowAtIndexPath:中尽量做更少的操作。如果需要做一些处理,那么好做过一次之后,将结果缓存起来。
使用适当的数据结构来保存需要的信息。不同的结构会带来不同的操作代价。
使用rowHeight, sectionFooterHeight 和 sectionHeaderHeight 来设置一个恒定 高度,而不要从delegate中获取。
21) 选择正确的数据存储方式
选择正确的数据存储方式
当需要存储和读取大量的数据时,该如何选择存储方式呢?
有如下选择:
使用NSUserDefaults进行存储
保存为XML,JSON或Plist格式的文件
利用NSCoding进行归档
存储到一个本地数据库,例如SQLite。
使用Core Data.
使用NSUserDefaults有什么问题呢? 虽然NSUserDefaults很好并且容易,不过只只针对于存储小量数据(比如你的级别,或者声音是开或关)。如果要存储大量的数据,好选择别的存储方式。
大量数据保存为结构化的文件也可能会带来问题。一般,在解析这些结构数据之前,需要将内容全部加载到内存中,这是很消耗资源的。虽然可以使用SAX来处理XML文件,但是这有点复杂。另外,加载到内存中的所有对象,不一定全部都需要用到。
那么使用NSCoding来保存大量数据怎么样呢?因为它同样是对文件进行读写,因此依然存在上面说的问题。
要保存大量的数据,好使用SQLite或Core Data。通过SQLite或Core Data可以进行具体的查询——只需要获取并加载需要的数据对象——避免对数据进行不合理的搜索。在性能方面,SQLite和Core Data差不大。
SQLite和Core Data大的区别实际上是用法上。Core Data代表一个对象模型,而SQLite只是一个DBMS。一般,苹果建议使用Core Data,不过如果你有特殊的原因不能使用Core Data的话,可以使用低级别的SQLite。
在程序中,如果选择使用SQLite,这里有个方便的库FMDB :可以利用该库操作SQLite数据库,而不用深入使用SQLite C API。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11