您的位置:首页 > 移动开发 > IOS开发

iOS性能优化三部曲(终极版)

2016-01-13 23:08 211 查看
iOS性能优化是一个比较头痛的问题,经过前面两篇文章的简要介绍估计大家已经有了了解,那么我们就向大牛进发吧!!!

1.加速启动时间

用户由于不懂技术,当我们的app的数据如果不能及时显示数据肯定会引起用户的吐槽,我们尽可能做的是使用恰当的异步任务加载远端、数据库数据和解析数据。

避免过多使用XIB,因为XIB的加载是在主线程中加载的,我们还是让主线程全心全意的负责UI吧!!

2.使用Autorelease Pool

NSAutoreleasePool负责释放放入到释放池中的对象,随着对象的越来越多,内存会被占用的越来越多,这是系统会将释放池中长久不用的对象进行释放

当我们要操作非常非常多的对象时,我们可以自己创建释放池,将对象慢慢地被释放,如下:

NSArray *urls = An array of file urls;
for (NSURL *url in urls) {
@autoreleasepool {
NSError *error;
NSString *fileContents = [NSString stringWithContentsOfURL:url usedEncoding:NSUTF8StringEncoding error:&error];
}
}


这段代码在每次遍历后释放所有autorelease对象

3.选择是否缓存图片

常见的从缓存中加载图片有两种方式,一个:是用 imageNamed:,第二个是:imageWithContentsOfFile:,第一种方法比较常见,既然两种方法都是加载图片,那两者之间有什么区别那?

imageNamed加载图片时会缓存图片。apple文档有这样一段描述:这个方法在用指定的名字在系统缓存中查找并返回一个图片对象如果存在的话,如果在缓存中没有找到相应的图片,这个方法会从指定的文档中加载然后缓存并返回对象,而imageWithContentsOfFile:方法仅仅加载图片,面对这种情况下我们如何选择?

如果你要加载一个大图并且一次性使用的话,我们就没必要缓存这个图片了,用imageWithContentsOfFile:即可,没必要浪费内存来缓存它了!相反,如果图片多次使用,我们最好使用imageNamed:,缓存图片以防以后使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: