iOS广告页实现优化技巧

作者: 李周 | 来源:发表于2017-03-30 10:37 被阅读228次

    之前做广告页的时候就一直想来总结一下几个版本优化时的思路,广告页不同于其他页面图片的原因是极其需要考虑弱网情况下的显示效果,当然你可以在用户第一次进入app加载启动页的时候缓存广告页的数据,但是一般而言都是在启动页之后进行广告数据的管理。


    1 第一个版本

    在做第一个版本的时候,主要还是延续了之前的思路,将广告页的数据装换成NSData存入文件中,然后根据文件是否超过缓存期来决定是否根据数据,很简单的思路:

    使用dataWithContentsOfURL:方法将数据存在指定文件中

    存储图片的data数据

    当超过指定的缓存期时候,需要清空之前文件中的图片数据

    清空图片数据

    出现的问题:

    如果有使用过NSData的dataWithContentsOfURL:方法,会知道这是一个同步方法,这在弱网或者图片清晰度非常高的时候极其容易造成崩溃的效果。所以需要设置异步的处理:

    添加异步处理

    2 第二个版本

    在第二个版本的时候,因为需求的原因要把这些语句迁移一下,觉得代码量还是挺多的,所以直接学习了SDWebImage第三方框架的处理。(其实第三方既然能流行起来,说明已经把一些需求都考虑到了,参考能很大的优化代码)

    广告页的显示也就几秒钟,在几秒的时间内如果显示不全图片数据的话,该怎么处理?

    直接不显示就行了

    这个方法应该很常见,但是options这个选项很少会去注意,不知道可以在网上搜一下有关的讲解,而这里使用SDWebImageAvoidAutoSetImage的原因是:

    不要自动的将加载完成的图片添加到广告页,而是自己手动添加的判断设置。

    而在block里面的判断:

    SDImageCacheTypeMemory 和 SDImageCacheTypeDisk 保证数据来源于已经缓存的位置。

    当然使用这个SDWebImage框架的另一个优势在于数据的一个清理:

    清理数据

    相关的问题:

    在了解广告页图片的情况下,广告页还有一个挺重要的点:倒计时功能。网上看到有很多不同的计时方法,之前也很想去总结一下,所以结合广告页大概的讲一下:

    NSTimer计时:是最常使用的,oc封装的方法。

    NSTimer实现计时

    了解过的人知道,NSTimer需要配合NSRunLoop使用以避免切换mode的时候停止计时了,但是NSRunLoop mode里面的timer(也就是NSTimer)是有一定容忍值的,及时你将容忍值设为0,还是会有计时误差。所以像几秒之类的可以使用NSTimer,但是长时间计时的话尽量不要将其纳入考虑。

    GCD计时方法:不受到mode的影响

    GCD计时

    其实越基础的东西性能越好,在设置计时的时间dispatch_source_set_timer方法中:

    dispatch_source_set_timer

    leeway这个参数的含义套用别的一段话:

    所以这个计时可以适用于短时间与长时间两种,优先考虑。

    CADisplayLink计时方法:精确度更高

    CADisplayLink计时

    其实接触到CADisplayLink计时,是在屏幕绘制需要定时刷新的时候。很多人说CADisplayLink跟屏幕的刷新频率一样,1秒60次(如果是包含秒的倒计时或者是做了一个时钟的效果可以考虑)。但是其实有时候不是:

    如果调用的刷新方法中耗时多长或者CPU繁忙的情况下,都会导致无法保证1秒60次的刷新频率。


    其实在一个软件维护的阶段需要考虑的就是这些细节,从细节上来提高使用的性能。广告页的优化主要还是从显示的广告图片以及计时器入手。如果有更好的处理方法,可以一起分享。

    相关文章

      网友评论

        本文标题:iOS广告页实现优化技巧

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