性能优化总结之一

1.首先,图片本身有 3 种常见的编码方式:

iOS 处理图片的一些小 TipiOS 处理图片的一些小 TipiOS 处理图片的一些小 Tip

第一种是 baseline,即逐行扫描。默认情况下,JPEG、PNG、GIF 都是这种保存方式。
第二种是 interlaced,即隔行扫描。PNG 和 GIF 在保存时可以选择这种格式。
第三种是 progressive,即渐进式。JPEG 在保存时可以选择这种方式。
在下载图片时,首先用 CGImageSourceCreateIncremental(NULL) 创建一个空的图片源,随后在获得新数据时调用
CGImageSourceUpdateData(data, false) 来更新图片源,最后在用 CGImageSourceCreateImageAtIndex() 创建图片来显示。

你可以用 PINRemoteImage 或者 YYWebImage 来实现这个效果。SDWebImage 并没有用 Incremental 方式解码,所以显示效果很差。但是不会影响性能。

以上参考YY博客。

2.怎么计算iOS丢帧

由于CADisplayLink是一个能以和屏幕刷新频率同步的频率将特定的内容绘制到屏幕的定时器类,所以我们可以利用CADisplayLink来计算帧数,由于iOS 的屏幕刷新频率60HZ,也就是60次/秒,屏幕没刷新一次,NSRUNLOOP就会向已经注册它的CADisplayLink的@selector发送消息,我们可以在用个count计数器来计算一秒内,count等于多少来判断一秒内真实的帧数(最大60)。

理想是美好的,现实是残酷的,利用CADisplayLink并不能一定保证调用以60次的频率执行@selector方法,原因有两点:第一,如果CPU过于繁忙宇其它计算,就不能保证以60HZ的频率绘制屏幕,这样就会跳过若干个调用@selector方法的机会了;第二,要是@selector方法执行时间太久,也会错过若干个调用@selector方法的机会了。正因为上述两点,利用CADisplayLink时,我们得到的真实帧数有可能不足60了 ,少了的帧数就是我们要说的丢帧。通过丢帧情况。所以我们知道引起丢帧的原因是因为CPU过于繁忙,在监测应用卡顿时,通过丢帧的情况可以反映卡顿是不是由CPU过于繁忙引起的。如果是CPU引起的,可以用instruments的TimeProfile查看那些方法执行时候过长,从而解决问题。

3.第二点说了丢帧的情况可以用来判断应用卡顿是否是由于CPU引起的,如果不是由于CPU引起的,接下来就要检查GPU的使用情况了。具体可以看点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值