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