JSON

25条提高iOS App性能的技巧和诀窍(3)

字号+ 作者:H5之家 来源:H5之家 2016-09-14 13:00 我要评论( )

这里有一段很棒的代码,用在任何时候你需要针对一个不大会改变的图片创建一个NSURLRequest。 + (NSMutableURLRequest *)imageRequestWithURL:(NSURL *)url {NSMutableURLRequest *request = [NSMutableURLRequest r

这里有一段很棒的代码,用在任何时候你需要针对一个不大会改变的图片创建一个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; }

如果想知道更多关于Http caching,NSURLCache,NSURLConnection等内容,请阅读the NSURLCache entry

注意,你可以通过NSURLConnection获取取一个URL请求,AFNetworking也可以。有了这个技巧这样你不用改变任何你的网络代码。

如果要缓存不牵扯到HTTP请求的其他东西,NSCache是很好的选择。

NSCache像NSDictionary,但是当系统需要回收内存的时候会自动的移除内容。

对HTTP Cache感兴趣并想学更多的内容?推荐阅读这篇文章best-practices document on HTTP caching


11)考虑绘图

在IOS中有很多方法可以制作拥有很棒外观的buttons,你可以是由全尺寸的图像,也可以使用调整尺寸之后的图像,或者你用CALayer,CoreGraphics,甚至OpenGL手动的它们。

当然,每种途径都有不同的复杂度级别和不同的性能,这篇文章非常值得一读post about iOS graphics performance here,这是Apple UIKit团队成员Andy Matuschak发表的文章,里面对各种方法有一些非常棒的见解和对性能的权衡。

使用预渲染图片更快,因为iOS不用创建一张图像和绘制图形到屏幕上(图像已经处理好了)。问题是你需要全部把这些图片放进应用束里,增加它的尺寸。那就是为什么使用可调整尺寸的图片是那么好:你通过移除”浪费了的“图片空间来节约空间。你也不需要为不同的元素生成不同的图片。(例如 buttons)

尽管如此,用图片你会失去代码调整你图片的能力,需要一次又一次的生成它们然后把它们加入到应用中。这是个缓慢的过程。另外一点如果你有动画或者很多张稍微变化的图片(例如 颜色叠加),你需要加很多的图片增加了应用束的大小。

总结一下,你需要想对你来说最重要的是什么:绘图性能还是app的大笑.通常两个都很重要,所以你会在一个工程里使用这两种方法。


12)处理内存警告

当系统内存低的时候iOS会通知所有的正在运行的app,关于低内存警告的处理苹果官方文档描述:

如果你的应用收到这个警告,它必须尽可能多的释放内存。最好的方法是移除对缓存,图像对象,和其他稍后要创建的对象的强引用。

幸运的是,UIKit提供了一些方法去接收低内存警告:

一旦收到这些警告,你的处理方法必须立刻响应并释放不必要的内存。

举例,如果视图当前不可见,UIViewController的默认行为是清除这些视图;子类可以通过清除额外的数据结构来补充父类的默认行为。一个应用程序维护一个图片的缓存,没有在屏幕上的图片都会被释放。

一旦收到内存警告,释放可能的全部内存是很重要的,否则你就有让你的app被系统杀死的的风险。

尽管如此,开始扑杀对象释放内存的时候要小心,因为你需要保证它们会在之后重新创建。当你开发app的时候,用你的模拟器上的模拟内存警告功能测试这种情况。


13)重用大开销对象

有的对象的初始化非常慢--NSDateFormatter 和NSCalendar是两个例子,但是你不能避免使用它们,当你从JSON/XML响应中解析日期时。

避免使用这些对象时的性能瓶颈,试着尽可能的重用这些对象。你可以加入你的类中成为一个属性,也可以创建为静态变量。

注意如果你选择了第二种方式,这个对象在app运行的时候会一直保持在内存里,像单例一样。

下面这段代码演示了NSDateFomatter作为一个属性的lazy加载,第一次被调用然后创建它,之后就使用已创建在的实例

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

同样要记住设置一个NSDateFormatter的日期格式几乎跟创建一个新的一样慢。因此,如果在你的应用中你频繁需要处理多个日期格式,你的代码应该获利于初始化创建,重用,多个NSDateFormatter对象。

14)使用精灵表

你是一个游戏开发者吗?精灵表是你的好朋友之一.精灵表让绘制比标准屏幕绘制方法更快速,消耗更少的内存。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php使用json_decode返回NULL

    php使用json_decode返回NULL

    2016-09-14 13:00

  • php基于jquery的ajax技术传递json数据简单实例,jqueryjson

    php基于jquery的ajax技术传递json数据简单实例,jqueryjson

    2016-09-05 18:01

  • php中的Json函数在jquery中的使用

    php中的Json函数在jquery中的使用

    2016-09-01 14:00

  • www.93847xjj100.com新锦江备用网址

    www.93847xjj100.com新锦江备用网址

    2016-08-29 16:00

网友点评