美文网首页
iOS 取消dispatch_after的执行

iOS 取消dispatch_after的执行

作者: 酷比Xcoder | 来源:发表于2016-12-21 15:28 被阅读1665次

    最近有这样一种情况,就是某时刻开启了一个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];
    

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

    相关文章

      网友评论

          本文标题:iOS 取消dispatch_after的执行

          本文链接:https://www.haomeiwen.com/subject/houqvttx.html