之前一直使用NSTimer来做定时之类的任务,今天突然想使用一下更加灵活的的dispatch_source_create()创建一个timer源做一个任务,之后就遇到一个小问题,说是小问题但确实挺坑的。
第一次很随意就手写了如下代码:
然后运行后神奇的问题就出现了,NSLog(@"dispatch_source_timer is executed");这句代码死活就只执行一次,按上面的代码来说不应该是每两秒执行一次吗?思前想后,把上述每个API也确切的研究了一番,确实没有问题啊,最终恍然大悟,原来是_timer 不是一个全局变量或属性,第一次运行完后,ARC就会把它释放掉了,RunLoop 扫描不到这个timer了。所以如下操作就正常了。
但是同样的代码使用NSTimer确实可以正常使用的,这也许就是使用C语言Dispatch系列Api和Objective-c的Api在ARC下的区别吧