首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【iOS开发】启动时间优化,runloop的一个小技术点

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

作者头像
吴老师
发布2018-09-05 10:55:46
6590
发布2018-09-05 10:55:46
举报

刚接触项目不久,最近产品说有一个点要优化,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的用法不是很了解,以为不会阻塞。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档