GCD方法
///定時器
@property (nonatomic,strong) dispatch_source_t timer;
例如:啟動頁倒計時
- (void)createTimerWithTime:(NSString *)time{
//設(shè)置倒計時時間
//通過檢驗發(fā)現(xiàn)柄驻,方法調(diào)用后求冷,timeout會先自動-1瞬浓,所以如果從15秒開始倒計時timeout應(yīng)該寫16
//__block 如果修飾指針時渣淤,指針相當(dāng)于弱引用另玖,指針對指向的對象不產(chǎn)生引用計數(shù)的影響
__block int timeout = [time intValue]+1;
//獲取全局隊列
dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//創(chuàng)建一個定時器袁串,并將定時器的任務(wù)交給全局隊列執(zhí)行(并行刨沦,不會造成主線程阻塞)
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, global);
self.timer = timer;
//設(shè)置觸發(fā)的間隔時間
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
WS(weakSelf);
//設(shè)置定時器的觸發(fā)事件
dispatch_source_set_event_handler(timer, ^{
//1. 每調(diào)用一次 時間-1s
timeout --;
if (timeout <= 0) {
//關(guān)閉定時器
dispatch_source_cancel(timer);
//在主線程中對button進行修改操作
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.timeButton setTitle:@"跳過" forState:UIControlStateNormal];
[weakSelf delayedLoadVC];
});
}else {
//處于正在倒計時鸠真,在主線程中刷新button上的title悯仙,時間-1秒
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf.timeButton setTitle:[NSString stringWithFormat:@"跳過 %d",timeout] forState:UIControlStateNormal];
});
}
});
dispatch_resume(timer);
}
關(guān)閉定時器
dispatch_source_cancel(self.timer);