通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化。结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化。

一、view优化

1、不透明的View 设置为opaque。

2、根据实际情况重用、延迟加载或预加载View。

3、减少subviews数量,定制复杂cell使用drawRect。尽量使用drawRect而不是layoutSubView。

4、不直接调用drawRect、 layoutSubviews方法。万不得已时可以用替代方法: setNeedsDisplayInRect,layoutIfNeeded,替代方法也尽量不要调用,通过合理的代码结构解决重布局问题,尽量一次完成布局。

二、UITableView优化

1、正确使用‘reuseIdentifier’重用cell。

2、尽量使所有的view opaque。

3、减少subviews数量,定制复杂cell使用drawRect。

4、尽量不调用‘cellForRowAtIndexPath’。调用cellForRowAtIndexPath会导致cell缓存失效

5、cache尽可能多的东西,包括行高。

三、缓存优化

1、缓存不大可能改变但是需要经常读取的东西。远端服务器的响应、图片、计算结果。

2、重用大开销对象。对于初始化很慢的对象通过添加属性的方式保持该对象,保证只被初始化一次,多次复用。如NSDataFormatter。

3、方法指针缓存。如果一个方法在一个循环次数非常多的循环中使用,在进入循环前使用methodForSelector获取该方法的IMP,在循环体中直接调用该IMP。

四、线程优化

1、 耗时操作使用子线程进行,或者放入任务队列中。

2、同步使用串行队列代替同步锁。

3、不重要的任务放在idle中运行

- (void)idleNotificationMethod {
// do something here
} - (void)registerForIdleNotification
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(idleNotificationMethod)
name:@"IdleNotification"
object:nil]; NSNotification *notification = [NSNotification
notificationWithName:@"IdleNotification" object:nil]; [[NSNotificationQueue defaultQueue] enqueueNotification:notification
  postingStyle:NSPostWhenIdle];
}

五、内存优化

使用autorelease pool 降低内存峰值

六、代码细节优化

1、不在viewWillApear中进行费时操作

2、如果关键代码用C/C++效率更高就使用C/C++

七、图片优化

对图片数据进行decode。在子线程中设置image的大小后,在imageview中使用缩放后的image。原因:由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,所以在每次画图的时候,会有一个解压操作,UIImage初始化后仅仅是把图片加载到内存中,而实际的解码和重采样是在图片需要显示时才进行。

//图片重采样,在子线程中进行
CGSize itemSize = CGSizeMake(width, height);//实际要缩放的大小
UIGraphicsBeginImageContext(itemSize);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[image drawInRect:imageRect];
UIImage newImage = UIGraphicsGetImageFromCurrentImageContext(); //重采样后的图片
UIGraphicsEndImageContext();

iOS性能优化技巧的更多相关文章

  1. [转] iOS性能优化技巧

    (转自:hhttp://www.raywenderlich.com/31166/25-ios-app-performance-tips-tricks#arc, http://blog.ibireme. ...

  2. IOS 性能优化的建议和技巧

    IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelo ...

  3. 李洪强iOS开发之性能优化技巧

    李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view ...

  4. iOS界面流畅技巧之微博 Demo 性能优化技巧

    微博 Demo 性能优化技巧 我为了演示 YYKit 的功能,实现了微博和 Twitter 的 Demo,并为它们做了不少性能优化,下面就是优化时用到的一些技巧. 预排版 当获取到 API JSON ...

  5. iOS性能优化:Instruments使用实战

    iOS性能优化:Instruments使用实战   最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instrument ...

  6. iOS性能优化-数组、字典便利时间复杂

    上图是几种时间复杂度的关系,性能优化一定程度上是为了降低程序执行效率减低时间复杂度. 如下是几种时间复杂度的实例: O(1) return array[index] == value; 复制代码 O( ...

  7. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  8. 【腾讯Bugly干货分享】微信读书iOS性能优化

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 “8小时内拼工作,8小时外拼成长 ...

  9. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

随机推荐

  1. Ubuntu 16.04安装Maven

    此篇为http://www.cnblogs.com/EasonJim/p/7139275.html的分支页. 前提:必须正确安装JDK. 一.通过二进制包(tar.gz)安装 下载: 进入下载列表:h ...

  2. python成长之路五-文件操作

    1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...

  3. WordPress发送注册用户设置密码邮件提示:您的密码重设链接无效,请在下方请求新链接

    1.修改WP根目录下的 wp-login.php文件将 $message .= '<' . network_site_url("wp-login.php?action=rp&k ...

  4. Minimum Cost POJ - 2516(模板题。。没啥好说的。。)

    题意: 从发货地到商家 送货 求送货花费的最小费用... 有m个发货地,,,n个商家,,每个商家所需要的物品和物品的个数都不一样,,,每个发货地有的物品和物品的个数也不一样,,, 从不同的发货地到不同 ...

  5. LOJ #2538. 「PKUWC 2018」Slay the Spire (期望dp)

    Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spi ...

  6. 洛谷 P1057 传球游戏 解题报告

    P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹 ...

  7. suoi08 一收一行破 (tarjanLca+树状数组)

    用一个差分树状数组维护一下每个深度的和,然后每次拿着路径端点和lca加一加减一减就行了 #include<bits/stdc++.h> #define pa pair<int,int ...

  8. 洛谷P1012 拼数 string

    又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...

  9. linux提取指定列字符并打印所有内容(awk)

    假设有文件长如下样子: CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  samplename 1 3552 ...

  10. 在Vue中如何使用axios跨域访问数据

    最近在项目中需要用到axios,所以就恶补一下这个axios到底是什么东东.越来它是vue-resource的替代品,官网也说了,以后都用axios, vue-resource不在维护.那么这个axi ...