dispatch_source_set_timer坑爹必备

之前一直使用NSTimer来做定时之类的任务,今天突然想使用一下更加灵活的的dispatch_source_create()创建一个timer源做一个任务,之后就遇到一个小问题,说是小问题但确实挺坑的。

第一次很随意就手写了如下代码:

然后运行后神奇的问题就出现了,NSLog(@"dispatch_source_timer is executed");这句代码死活就只执行一次,按上面的代码来说不应该是每两秒执行一次吗?思前想后,把上述每个API也确切的研究了一番,确实没有问题啊,最终恍然大悟,原来是_timer 不是一个全局变量或属性,第一次运行完后,ARC就会把它释放掉了,RunLoop 扫描不到这个timer了。所以如下操作就正常了。

但是同样的代码使用NSTimer确实可以正常使用的,这也许就是使用C语言Dispatch系列Api和Objective-c的Api在ARC下的区别吧

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

推荐阅读更多精彩内容