美文网首页将来跳槽用小知识点好东西
【iOS开发】启动时间优化,runloop的一个小技术点

【iOS开发】启动时间优化,runloop的一个小技术点

作者: Brant白叔 | 来源:发表于2017-07-03 10:28 被阅读163次

    刚接触项目不久,最近产品说有一个点要优化,App的启动页面显示时间太长了。一直在开发其它的app,还真没注意这个点,去看了一下还真是,有的时候启动页面的显示时间能有10s。

    排查:

    • 用TimeProfile看了一下启动流程,没发现哪里特别耗时,只有一个添加启动后广告的地方能有个1s多。没怎么关心。
    • Google 了一下,添加debug的环境变量:DYLD_PRINT_STATISTICS 值为1. 看了一下库的加载也只有几百ms,都不上秒。问题点应该也不在这里。
    • 回去看那个添加广告页面的地方。发现一句下面这样的代码。while的条件是要广告图片下载完成。
    while(condition){
     [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; 
    }
    
    • 不清楚上面这句代码的意思,查了一下当前condition为YES时,当前runloop会一直接收处理其他输入源,当前流程不继续处理,当condition为NO,当前流程继续。但是这个while不会阻塞整个程序的运行。
    • 这就有问题了,如果网络不返回,主线程不是会阻塞。直到网络返回。
    • 重写了一下这个广告添加的逻辑,先查看本地是否有缓存好的图片,有就显示,没有就不显示。同时去服务器拉取要显示的图片地址,并把图片缓存到本地,供下次打开时显示。而不是实时的去下载。

    低级错误。原来的同事,只是缓存了一下图片的地址,没有缓存图片本身。还有就是可能也是对上面那个runloop的用法不是很了解,以为不会阻塞。

    相关文章

      网友评论

        本文标题:【iOS开发】启动时间优化,runloop的一个小技术点

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