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


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

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

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

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

    13) 重用花销很大的对象

    http://s4.51cto.com/wyfs01/M01/07/02/wKioOVFs9ezTW4RpAAAwQF1sIqU235.jpg

    有些对象的初始化非常慢——比如NSDateFormatter和NSCalendar。不过有时候可以避免使用这些对象,例如在解析JSON/XML中的日期时。

    当使用这些对象时,为了避免性能上的瓶颈,可以尝试尽量重用这些对象——在类中添加一个属性或者创建一个静态变量。

    注意,如果使用静态变量的话,对象会在程序运行的时候一直存在,就像单例一样。

    下面的代码演示创建一个延迟加载的日期格式属性。第一次调用属性的时候,会创建一个新的日期格式。之后再调用的话,会返回已经创建好的实例对象:

    1. // in your .h or inside a class extension 
    2. @property (nonatomic, strong) NSDateFormatter *formatter; 
    3. // inside the implementation (.m) 
    4. // When you need, just use self.formatter 
    5. - (NSDateFormatter *)formatter { 
    6.     if (! _formatter) { 
    7.         _formatter = [[NSDateFormatter alloc] init]; 
    8.         _formatter.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy"; // twitter date format 
    9.     } 
    10.     return _formatter; 

    另外,还需要记住的是在设置NSDateFormatter的日期格式时,同样跟创建新的一个NSDateFormatter实例对象时一样慢!因此,在程序中如果需要频繁的处理日期格式,那么对NSDateFormatter进行重用是非常好的。

    14) 使用Sprite Sheets

    http://s1.51cto.com/wyfs01/M00/07/02/wKioJlFs9eyy6e-cAAA44XQc7Zg575.jpg
    使用sprite sheets

    你是一个游戏开发者吗?是的话那么sprite sheets是最佳选择之一。使用Sprite sheets跟常用的绘制方法比起来,绘制更快,并且消耗更少的内存。

    下面是两个非常不错的sprite sheets教程:

    如何在Cocos2D中使用动画和Sprite Sheets 

    如何在Cocos2D中使用纹理包(Texture Packer)和像素格式来创建并优化Sprite Sheets 。(第二个教程详细的介绍了像素格式——在游戏中可以衡量性能的影响)

    如果还不熟悉sprite sheets,可以看看这里的介绍:SpriteSheets – 视频, Part 1和 Part 2 。这两个视频的作者是Andreas Löw, 他是纹理包(Texture Packer)的创建者, 纹理包是创建sprite sheets的重要工具。

    除了使用sprite sheets外,这里还介绍了一些用于游戏开发中的技巧,例如,如果你有很多sprite(比如射击类游戏中),那么可以重用sprite,而不用每次都创建sprite。
    15) 避免重新处理数据

    许多程序都需要从远程服务器中获取数据,以满足程序的需求。这些数据一般是JSON或XML格式。在请求和接收数据时,使用相同的数据结构非常重要。

    为什么呢?在内存中把数据转换为适合程序的数据格式是需要付出额外代价的。

    例如,如果你需要在table view中显示一些数据,那么请求和接收的数据格式最好是数组格式的,这样可以避免一些中间操作——将数据转换为适合程序使用的数据结构。

    类似的,如果程序是根据键来访问具体的值,那么最好请求和接收一个键/值对字典。

    在第一时间获得的数据就是所需要格式的,可以避免将数据转换为适合程序的数据格式带来的额外代价。
    16) 选择正确的数据格式


    选择正确的数据格式

    将数据从程序传到网络服务器中有多种方法,其中使用的数据格式基本都是JSON和XML。你需要做的就是在程序中选择正确的数据格式。

    JSON的解析速度非常快,并且要比XML小得多,也就意味着只需要传输更少数据。并且在iOS5之后,已经有内置的JSON反序列化API了,所以使用JSON是很容易的。

    不过XML也有它自己的优势:如果使用SAX方法来解析XML,那么可以边读XML边解析,并不用等到全部的XML获取到了才开始解析,这与JSON是不同的。当处理大量数据时,这种方法可以提升性能并减少内存的消耗。
    17) 设置适当的背景图片

    在iOS编码中,跟别的许多东西类似,这里也有两种方法来给view设置一个背景图片:

    1.可以使用UIColor的colorWithPatternImge方法来创建一个颜色,并将这个颜色设置为view的背景颜色。
    2.可以给view添加一个UIImageView子视图。

    如果你有一个全尺寸的背景图片,那么应该使用UIImageView,因为UIColor的colorWithPatternImge方法是用来创建小图片的——该图片会被重复使用。此时使用UIImageView会节省很多内存。

    1. // You could also achieve the same result in Interface Builder 
    2. UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background"]]; 
    3. [self.view addSubview:backgroundView]; 

    不过,如果你计划用小图片当做背景,那么应该使用UIColor的colorWithPatternImge方法。这种情况下绘制速度会很快,并且不会消耗大量的内存。

    1. self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]]; 
  • 相关阅读:
    测试方法与步骤
    团队项目需求分析
    第一次个人作业
    3种shell自动交互的方法
    mysql用户管理
    build web application with golang
    安卓中的LINUX内核
    结对项目小结
    关于aria2-yaaw下载软件
    软工结对项目预览
  • 原文地址:https://www.cnblogs.com/piaojin/p/5443194.html
Copyright © 2020-2023  润新知