最近有这样一种情况,就是某时刻开启了一个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];
这样就可以取消执行,拆除这个定时炸弹了。
网友评论