延遲執(zhí)行的方法
[self performSelect:@selector(task) withObject:nil afterDelay:2.0];
使用定時器方法延遲執(zhí)行
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:NO];
使用GCD方法延遲耘沼,優(yōu)點是可以在子線程執(zhí)行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{...});
不受RunLoopMode模式影響的定時器-- GCD的定時器
// 創(chuàng)建GCD中的定時器 定時器在類中必須有強引用真慢,不然就被釋放掉了無法啟動,使用strong類型.
@property(nonatomic, strong) dispatch_source_t timer;
// 1.表示定時器 2.3.表示描述信息澈段,用于創(chuàng)建其他事件用的參數(shù) 4.隊列,決定定時器在哪個線程執(zhí)行
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0,0));
self.timer = timer; // 只是為了定時器不被釋放掉
// 2.設(shè)置定時器(起始時間)
// 1.定時器對象 2.起始時間,從現(xiàn)在開始計時 3.間隔時間(納秒) 4.精準度,0代表絕對精準.
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
// 3.設(shè)置定時器執(zhí)行的任務(wù)
dispatch_source_set_event_handler(timer, ^{...});
// 4.啟動定時器
dispatch_resume(timer);