在iOS中,我們可以使用NSTimer或者GCD來實現定時器功能。
NSTimer是Foundation框架中的一個類,可以用來創建定時器。它的使用相對簡單,可以通過指定時間間隔和重復次數來創建一個定時器,并且可以指定定時器觸發后要執行的方法。
例如,我們可以使用NSTimer來創建一個每隔1秒執行一次的定時器:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
上述代碼中,scheduledTimerWithTimeInterval方法用來創建一個定時器,第一個參數指定了時間間隔,第二個參數是指定定時器觸發后要調用的方法,第三個參數可以傳遞一些附加信息給定時器的回調方法,最后一個參數repeats指定了定時器是否重復執行。
GCD(Grand Central Dispatch)是蘋果提供的一種多核編程的解決方案,可以用來創建定時器。GCD的定時器相對于NSTimer更加靈活,可以在主線程或者后臺線程中執行任務,并且可以通過設置dispatch_source_set_timer的參數來實現不同的定時器行為(比如只執行一次或者重復執行)。
例如,我們可以使用GCD來創建一個每隔1秒執行一次的定時器:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
// 定時器觸發后要執行的任務
});
dispatch_resume(timer);
上述代碼中,我們先創建了一個GCD定時器,然后使用dispatch_source_set_timer方法設置了定時器的參數,其中第一個參數指定了定時器的類型為DISPATCH_SOURCE_TYPE_TIMER,第二個參數是一個時間參數,指定了定時器第一次觸發的時間,第三個參數是時間間隔,指定了定時器觸發的間隔時間,最后一個參數指定了定時器的精度。最后,我們通過dispatch_source_set_event_handler方法設置了定時器觸發后要執行的任務,并通過dispatch_resume方法啟動了定時器。
需要注意的是,在使用NSTimer或GCD定時器時,如果在需要執行的任務中需要更新UI,需要在主線程中執行更新操作。