性能优化

1、图片压缩

美术给出的图片,即使是压缩过,仍存在较大的压缩空间,可以用这里或者更好的大小优化。

2、图片加载

主要有-imageNamed:和-imageWithContentsOfFile:两种方式。

AnimationImageCache类是一个动画图片加载类,用单例实现且内部用NSCache持有引用。

注意,当收到内存不足警告时,NSCache会自动释放内存。所以每次访问NSCache,即使上一次已经加载过,也需要判断返回值是否为空。

当加载多张图片的时候建议用-imageWithContentsOfFile:,-imageNamed:方法占用的内存短期内不会释放可能会导致内存占用过大,记得当时做汤姆猫demo的时候遇到过这个问题,把图片裁剪那个的UIImage* sourceImage = [UIImage imageNamed:@"image/animation/gift_boat"];换成imageWithContentsOfFile方法试试可能会解决一点问题

3、图片裁剪

为了减少图片资源的大小,有时候会把多个帧动画做成连续的一张图。这时需要程序加载一整张资源图,并在相应的位置进行裁剪。

4、Q:定时器采用CADisplayLink还是NSTimer?

A:都可以。重点在于添加到的mode,个人采用的是添加到NSRunLoopCommonModes的CADisplayLink。

5、Q:imageWithContentsOfFile加载的图片没有缓存,重复使用的时候会加载多次,是否可以用NSMutableArray存储起来?

A:不行。可以使用NSCache,步骤如下:

1、加载cache中的图片; 如果有则返回,没有到步骤2;

2、加载本地的缓存文件,如果有则返回,没有到步骤3;

3、从网络下载图片,到步骤4;

4、存入本地的缓存文件,到步骤5;

5、放入cache,返回图片;

如果不需要网络下载图片,可以去除3、4步骤,同时可以同步返回;

如果使用array存储图片,会一直持有引用;NSCache会在内存不足时主动释放,故而加载的时候需先判断是否有缓存文件;

6、Q:使用序列帧的时候,需要加载很多次图片?

A:可以把多张图片放到一张图片,加载后通过-CGImageCreateWithImageInRect切割出多张图片;

7、Q:instruments检查发现除了礼物送频繁后,聊天的UITableView消耗的时间也很长,如何优化?

A:从cell高度计算、图片加载、布局layout开始优化;

a.cell高度不会变,可以缓存;

b.图片加载可以用imageNamed或者cache实现;

c.尽量避免使用autolayout;

d.控制每帧刷新数量;

e.删除过多的历史消息;

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