NSTimer 工作一段时间后失效

       看到这个标题,可能会骂我,怎么会失效,代码写得有问题吧,其实还真是有问题。

       我先说一下场景,xcode新建mac工程,注意是mac工程,然后4中方式设置定时器,定时周期是 1.0/60 s,出现的结果就是,执行一段时间(几分钟不等)之后,定时器停止计时,这个停止的时间也不等,几秒到十几秒都有可能。我直接上代码吧.

1.GCD 异步线程,子线程里加定时器。

2.第二种,thread创建线程,子线程中添加timer

3.GCD sourceTimer的方式,定时,这里我用了自己的封装

4.主线程直接添加timer,这里就不复制代码了,太简单了

下面我们看执行的事件,很简单,就是打印计时器两次工作的时间差

如果这个时间差,大于5秒,我给了个打印,说明已经5秒没有调用了,也就是定时器停止了5秒。

下面贴上结果

这是开始执行的时间,14:04:25秒

这是出问题的时间14:05:33秒、14:05:44秒

后面还会陆陆续续的出问题。

检查了代码,没有问题,而且,我什么都没做,没有处理数据,没有刷新界面。所以我也无能为力了

神奇的是,同样的代码,我放在iPhone工程里面执行,没有问题,而且是放在主线程都没有问题。

我只是暴露问题,就希望做mac开发的童鞋们,遇到定时器的时候,注意下这个天坑。

这是时间设置的很短的时候,如果设置成1秒或者几秒,也会出问题

至于这个是单纯的定时器暂停还是会阻塞线程,没测到,我在主线程添加的定时器,然后界面上放一个button,不停的打印,看到打印停止了,马上点击button,看会不会有响应。

但是很神奇的是,加了button之后,发生的时间延长了,概率也大大降低了。很奇怪,也没有点击到。

我再次去掉button,出现概率提高了,出现之后我点击了屏幕里任何的地方,计时器马上开始工作。

这是不是mac系统对timer做的一种优化,就不清楚了,不敢忘记猜测,希望对遇到同样的问题的童鞋有帮助.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,821评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 酒瓶在我们的生活中习以为常,那么用完的酒瓶丢掉的话,是不是太可惜了?有没有再次利用的可能?答案是肯定的,今天就让小...
    0a911c2e79ad阅读 411评论 0 0
  • 我们总是习惯性的喜欢怀念一段无拘无束的日子,在一群欢闹声中慢慢变得团结友爱,然后成为一个大家庭。 数数一起走过的路...
    梨子墨阅读 890评论 1 2
  • 今天非常大的失落感。 果然,群里说下午3点左右17年注会考试成绩公布,翻看群里几十条新消息,众多恭喜云云。看了几张...
    3d8051bc8dee阅读 249评论 0 0