iOS 取消dispatch_after的执行

最近有这样一种情况,就是某时刻开启了一个dispatch_after,里面的代码块按常理在数秒后执行,这个没毛病。但是忽然有个需求就是当点击(执行某项操作)后,想终止这个dispatch_after里面代码块的执行,却发现悲催了,搜索资料居然告诉这个代码块没有办法终止。这不是想当于一个无法拆除的定时炸弹吗?
那么怎么办呢?我的解决方法是替换下面这个

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
          [self boom];
          }

改成:

[self performSelector:@selector(boom) withObject:nil afterDelay:4];

在需要取消 ‘hide’这个方法的执行的时候调用

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(boom) object:nil];

这样就可以取消执行,拆除这个定时炸弹了。

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

推荐阅读更多精彩内容