定时器NSTimer不能在dealloc中销毁引发的问题

2020-08-16  本文已影响0人  OwenKing

         最近朋友给我看一个项目,场景是每次app启动的时候首先加载首页,然后在首页的didload方法中注册了几个通知,然后呢有一个现象,是偶现的。就是经常性那些通知方法会走2遍,导致UI弹窗多次被覆盖,然后检查卡断点打印log的时候看通知也是只post了一次。然后我试了几次发现这个触发条件是token失效,重新登录的时候是必现的。我就看了整个VC的生命周期和方法调用。token失效的时候重新设置了rootVC为loginVC,这时候首页应该是被释放了。但是我写了打印log,发现didload是被+1了。所以说设置rootVC的时候首页试图应该是没有释放,我看一下首页代码,然后看到定时器是在dealloc中销毁和置为nil的,我改到viewwilldisapear中以后,这个现象就没有了。但是因为首页的特殊性,他的首页又需要计时ui的展示,不停的push/pop,定时器不能的创建/销毁也会消耗性能。所以我就给他发了我在网上找的定时器封装工具,通过传target的方法,销毁定时器。而且不需要自己做多余的处理。git下载地址

上一篇下一篇

猜你喜欢

热点阅读