iOS性能优化

1,把图片资源压缩到最小
apple推荐使用resizable image压缩图片,这是最快的方法。另外还有icon font,把矢量图做成一套字体,占用空间极少,这样不仅能缩小空间,还能更好的适配各种屏幕。

2,减轻主线程任务
1,把不需要在主线程的任务放到operation或者GCD等线程执行,View updates:view的任何改变都需要在主线程中。在iOS中延后这些操作很容易,有个规则叫做:不要调用我,我来调用你。(do not call us, we’ll cal you)。绝对不要主动调用drawRect:,调用setNeedsDisplay,然后iOS会在view停止滚动的时候重新渲染view。

 2,Processing: 有些很关键的任务不能在后台线程执行,例如保存Core Data database, 改变内存中的状态等等。可以把这些任务放到独立的代码块,并且在Default Runloop mode中执行

[self performSelectorOnMainThread:@selector(processDataOnMainThread:) withObject:dictionaryOfParameters
waitUntillDone:NO
modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]]
当用户开始滚动scrollview或者tableview的时候,run loop mode会被设置成 Common modes。当用户停止滚动时,它会被重置为Default Mode。因此,如果你直接使用[self processDataOnMainThread:dictionaryOfParams] ,那么函数将立即执行,而不管用户是否还在滚动view。但是如果用上面给的方法,那么iOS将在用户停止滚动view之后执行你的代码

3,保持内存平衡使用
下面是几个内存使用的尖峰时刻:
a) app 启动时:加载尽量少的对象,会加快启动速度。
b) View Controler初始化时:使用尽量少得view,或者延迟实例化。
c) UIWebview:UIWebview非常耗内存。使用时需要注意。

4,注意图片加载
通常我们会用imageNamed:来加载图片,但是用这个API有个问题,就是它会缓存加载的image。因此,对于那些被重用的图片,这个API很高效。但是对于那些使用很少的图片,用这个就很耗内存,那怎么才能及时的释放掉内存呢。使用initWithContentsOfFile:即可。 NSString path = [[NSBundle mainBundle] pathForResource:fileName ofType:fileType]; UIImage image = [[UIImage alloc] initWithContentsOfFile:path]; … [image release];
举个简单的例子,程序第一次使用时,会加载很多新手引导图片, 如果用initWithContentsOfFile:,这些图片所占用内存可以很快被释放,试试就知道。

5,view的渲染
子view尽量不要设置成透明色,因为透明色在显示时会合父view的颜色进行一个合成,导致内存消耗严重

6,性能检测
用户最直观的体验就是卡与不卡,卡不卡其实就是关键贞数值的体现,关键贞越小说明越卡,性能消耗越严重。代码中加入KMCGeigerCounter(github上可找到)可查看FPS值。
在一个tableview上如果cell的image都是圆形的,这个时候FPS值就有点低
除了用最直观的FPS,还可以用xcode自带工具检测下内存使用情况。

你可能感兴趣的:(iOS性能优化)