最近有這樣一種情況,就是某時(shí)刻開(kāi)啟了一個(gè)dispatch_after,里面的代碼塊按常理在數(shù)秒后執(zhí)行,這個(gè)沒(méi)毛病。但是忽然有個(gè)需求就是當(dāng)點(diǎn)擊(執(zhí)行某項(xiàng)操作)后,想終止這個(gè)dispatch_after里面代碼塊的執(zhí)行,卻發(fā)現(xiàn)悲催了,搜索資料居然告訴這個(gè)代碼塊沒(méi)有辦法終止。這不是想當(dāng)于一個(gè)無(wú)法拆除的定時(shí)炸彈嗎?
那么怎么辦呢?我的解決方法是替換下面這個(gè)
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’這個(gè)方法的執(zhí)行的時(shí)候調(diào)用
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(boom) object:nil];
這樣就可以取消執(zhí)行,拆除這個(gè)定時(shí)炸彈了。