在开发iOS应用程序时,让程序具有良好的性能是非常关键的。这也是用户所期望的,如果你的程序运行迟钝或缓慢,会招致用户的差评。

  然而由于iOS设备的局限性,有时候要想获得良好的性能,是很困难的。在开发过程中,有许多事项需要记住,并且关于性能影响很容易忘记。

  这是为什么我要写这篇文章!本文收集了25个关于可以提升程序性能的提示和技巧。

  目录

  我把性能优化技巧分为3个不同的等级:初级、中级和高级:

  中级

  在性能优化时,当你碰到一些复杂的问题,应该注意和使用如下技巧:

  重用和延迟加载View

  缓存、缓存、缓存

  考虑绘制

  处理内存警告

  重用花销很大的对象

  使用Sprite Sheets

  避免重新处理数据

  选择正确的数据格式

  设置适当的背景图片

  降低Web内容的影响

  设置阴影路径

  优化TableView

  选择正确的数据存储方式

  中级性能提升

  现在,在进行代码优化时,你已经能够完成一些初级性能优化了。但是下面还有另外一些优化方案,虽然可能不太明显(取决于程序的架构和相关代码),但是,如果能够正确的利用好这些方案,那么它们对性能的优化将非常明显!

  9) 重用和延迟加载View

  程序界面中包含更多的view,意味着界面在显示的时候,需要进行更多的绘制任务;也意味着需要消耗更多的CPU和内存资源。特别是在一个UIScrollView里面加入了许多view。

  这种情况的管理技巧可以参考UITableView和UICollectionView的行为:不要一次性创建所有的subview,而是在需要的时候在创建view,并且当view使用完毕时候将它们添加到重用队列中。

  这样可以仅在UIScrollView滚动的时候才配置view,以此可以避免分配创建view的带来的成本——这可能是非常耗资源的。

  现在有这样的一个问题:在程序中需要显示的view在什么时机创建(比如说,当用户点击某个按钮,需要显示某个view)。这里有两种可选方法:

  在屏幕第一次加载以及隐藏的时候,创建view;然后在需要的时候,再把view显示出来。

  直到需要显示view的时候,才创建并显示view。

  每种方法都有各自的优点和确定。

  使用第一种方法,需要消耗更多的内容,因为创建出来的view一直占据着内存,直到view被release掉。不过,使用这种方法,当用户点击按钮时,程序会很快的显示出view,因为只需要修改一下view的可见性即可。

  而使用第二种方法则产生相反的效果;当需要的时候猜创建view,这会消耗更少的内存;不过,当用户点击按钮的时候,不会立即显示出view。

  10) 缓存、缓存、缓存

  在开发程序时,一个重要的规则是“缓存重要的内容”——这些内容一般不会改变,并且访问的频率比较高。

  可以缓存写什么内容呢?比如远程服务器的响应内容,图片,甚至是计算结果,比如UITableView的行高。

  NSURLConnection根据HTTP头的处理过程,已经把一些资源缓存到磁盘和内存中了。你甚至可以手动创建一个NSURLRequest ,让其只加载缓存的值。

  下面的代码片段一般用在为图片创建一个NSURLRequest:

  + (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; // this will make sure the request always returns the cached image request.HTTPShouldHandleCookies = NO; request.HTTPShouldUsePipelining = YES; [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; return request;}

  注意:你可以使用NSURLConnection抓取一个URL请求,但是同样可以使用AFNetworking来抓取,这种方法不用修改所有网络相关的代码——这是一个技巧!:]

  如果你要直到更多关于HTTP 缓存, NSURLCache, NSURLConnection 以及相关的内容, 那么看一下NSHipster中的the NSURLCache entry。

  如果你需要缓存的内容没涉及到HTTP请求,那么使用NSCache。

  NSCache的外观和行为与NSDictionary类似, 但是,当系统需要回收内存时,NSCache会自动的里面存储的内容。Mattt Thompson 在NSHipster上写了一篇关于NSCache非常不错的文章。

  如果还想知道关于HTTP缓存更多的内容,那么建议阅读一下Google的这篇文章:best-practices document on HTTP caching。