美文网首页
性能优化

性能优化

作者: Legendary | 来源:发表于2017-09-06 14:25 被阅读0次

    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.删除过多的历史消息;

    相关文章

      网友评论

          本文标题:性能优化

          本文链接:https://www.haomeiwen.com/subject/iqpujxtx.html