这里有两个很棒的精灵表使用的教程
第二个教程详细覆盖了像素格式,它可以对游戏性能有一个可衡量的影响。
如果对精灵表还不是很熟悉,一个很好的介绍SpriteSheets – The Movie, Part 1andPart 2. 这些视频的作者是Andreas Lw,一个最流行的创建精灵表的工具Texture Packer的创建者。
除了使用精灵表之外,之前已经说到的内容也可以用在游戏上.举个例子,如果你的游戏有很多精灵,比如在标准的敌人或炮弹射击游戏,你可以重用精灵表额如是每次重新创建它们。
15)避免重复处理数据
很多app调用函数获取远程服务器上的数据.这些数据通常是通过JSON 或者 XML格式来传输。非常重要的是在请求和接收数据的时候努力在两端使用相同的数据结构。
理由?在内存中操纵数据以合适你的数据结构是非常昂贵的。
比如,如果你需要在表格视图中显示数据,最好请求和接收数据是数组的格式,以避免任何中间操纵数据,使其适合你在app中使用的数据结构
相似的,如果你的应用程序依赖于访问特定值的键,那么你可能会想要请求和接收一个键/值对的字典
通过第一次就获取正确格式的数据,在自己的应用程序中你就会避免很多的重复处理工作,使数据符合你的选择的结构。
16)选择正确的数据格式
你可以有很多方法从web 服务中传递数据到你的app中
JSON 是一种通常比XML小且解析更快的格式,它的传输的内容也比较小。自iOS5起,内置的JSON解析很好用built-in JSON deserialization
尽管如此,XML的一个优势当你使用SAXparsing方法时,你可以传输过程中读取它,在面的非常大的数据时,你不必像JSON一样在数据下载完之后才开始读取。
17)适当的设置背景图片
像iOS编码的其他工作一样,至少有两种不同方式去替换你视图的背景图片。
如果你有全尺寸的背景图片,你绝对要用UIImageView,因为UIColor的colorWithPatternImage是重复的创建小的模式图片,在这种情况下用UIImageView方式会节约很多内存。
// You could also achieve the same result in Interface Builder UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background"]]; [self.view addSubview:backgroundView];尽管如此,如果你计划用模式图片背景,你应该是用UIColor的colorWithPatternImage。它更快一些,而且这种情况不会使用很多内存。
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]];
18)减少你的网络占用
UIWebView 是非常游泳的.它非常容易用来显示web内容,甚至创建你app的视窗。这些都是标准UIKit 空间很难做到的。
尽管如此,你可能注意你可以用在你的app中的UIWebView组件并没有Apple的Safari app快。这是Webkit’s的Nitro引擎的限制使用。JIT compilation.
所以为了获得最佳的性能,你需要调整你的HTML。第一件事是尽可能多的避免Javascript,包括避免大的框架比如jQuery。有时使用vanilla Javascript取代依赖的框架会快很多。
随时随地遵循异步加载Javascript文件的实践。特别当它们不直接影响到页面表现的时候,比如分析脚本。
最后,总是要意识到你在用的图片,保持图片的正确尺寸。正如这个教程前面所提到的,利用精灵表的优势来节约内存和提高速度。
想要获取更多的信息,看看WWDC 2012 session #601 – Optimizing Web Content in UIWebViews and Websites on iOS.
19)设置阴影路径
你需要给视图或者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;看起来非常简单,是吧?
不好的是这个方法有一个问题。核心动画必须要先做一幕动画确定视图具体形状之后才渲染阴影,这是非常费事的操作。
这里有个替代方法让系统更好的渲染,设置阴影路径:
view.layer.shadowPath = [[UIBezierPath bezierPathWithRect:view.bounds] CGPath];
如果你想知道这个内容的更多技巧,Mark Pospesel写过一篇post aboutshadowPath.
设置阴影路径,iOS不需要总是计算如何绘制阴影。而是用已经计算好的的路径。坏消息是它依赖与你的视图格式,你是视图可能很难计算这个路径。另一个问题是你需要在每次视图的框架改变时更新阴影路径。
20)优化你的表格视图
表格视图需要快速的滚动,如果不能,用户能确切注意到很滞后。
为了让你的表格视图流畅的滚动,保证你实现了下列的建议。
21)选择正确的数据存储方式
当要存储和读取大数据的时候你的选择是什么?
你有一些选项,包括:
NSUserDefaults有什么问题呢?虽然说NSUserDefaults是好而且简单,它确实很好只有当你有很少的数据要存(像你的等级,或者音量是开还是关)。一旦你接触大数据,会有更好的其他选择。