• 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)


    25个增强iOS应用程序性能的提示和技巧(中级篇)(3)

    2013-04-16 14:42 破船之家 beyondvincent 字号:T | T
    一键收藏,随时查看,分享好友!

    本文收集了25个关于可以提升程序性能的提示和技巧,分为3个不同的等级:初级、中级和高级。您也可以点击查看初级篇。

    AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>>

    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框架添加到工程中,然后添加如下代码:

    1. #import <QuartzCore/QuartzCore.h> 
    2. // Somewhere later ... 
    3. UIView *view = [[UIView alloc] init]; 
    4. // Setup the shadow ... 
    5. view.layer.shadowOffset = CGSizeMake(-1.0f, 1.0f); 
    6. view.layer.shadowRadius = 5.0f; 
    7. view.layer.shadowOpacity = 0.6;

    上面这种方法有一个问题,Core Animation在渲染阴影效果之前,必须通过做一个离屏(offscreen)才能确定view的形状,而这个离屏操作非常耗费资源。下面方法可以更容易地让系统进行阴影渲染:设置阴影路径!

    1. view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];

    通过设置阴影路径,iOS就不用总是再计算该如何绘制阴影了。只需要使用你预先计算好的路径即可。有一点不好的是,根据view的格式,自己可能很难计算出路径。另外一个问题就是当view的frame改变时,必须每次都更新一下阴影路径。

    如果你想了解更多相关信息,可参看Mark Pospesel的一篇文章:shadowPath
    20) 优化TableView

    Table views需要快速的滚动——如果不能的话,用户会感觉到停顿。为了让table view平滑的滚动,确保遵循了如下建议:

    1.设置正确的reuseIdentifer以重用cell。
    2.尽量将view设置为不透明,包括cell本身。
    3.避免渐变,图像缩放以及离屏绘制。
    4.如果row的高度不相同,那么将其缓存下来。
    5.如果cell显示的内容来此网络,那么确保这些内容是通过异步来获取的。
    6.使用shadowPath来设置阴影。
    7.减少subview的数量。
    8.在cellForRowAtIndexPath:中尽量做更少的操作。如果需要做一些处理,那么最好做过一次之后,就将结果缓存起来。
    9.使用适当的数据结构来保存需要的信息。不同的结构会带来不同的操作代价。
    10.使用rowHeight, sectionFooterHeight 和 sectionHeaderHeight 来设置一个恒定 高度,而不要从delegate中获取。
    21) 选择正确的数据存储方式


    选择正确的数据存储方式

    当需要存储和读取大量的数据时,该如何选择存储方式呢?有如下选择:

    1.使用NSUserDefaults进行存储
    2.保存为XML,JSON或Plist格式的文件
    3.利用NSCoding进行归档
    4.存储到一个本地数据库,例如SQLite。
    5.使用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。

  • 相关阅读:
    Linux分区
    Vim 基本配置
    Ubuntu几种常见乱码解决方法
    ADB
    ubuntu下安装配置ADB
    Tinyos学习笔记(三)
    Tinyos学习笔记(二)
    Codeforces Round #249 (Div. 2) A题
    poj 2007 Scrambled Polygon(极角排序)
    MemSQL Start[c]UP 2.0
  • 原文地址:https://www.cnblogs.com/piaojin/p/5443196.html
Copyright © 2020-2023  润新知