維度 | GCD 計時器 (dispatch_source_t ) | NSTimer |
---|---|---|
依賴機制 | 直接掛在 GCD 隊列;底層走 Mach 內核定時源 | 掛在 RunLoop,必須指定 RunLoop & mode |
線程上下文 | 哪個隊列就在哪條線程回調(例中用 dispatch_get_main_queue() ) | 總在定時器所在的 RunLoop 線程(默認主線程 & NSDefaultRunLoopMode ) |
精度 | 納秒級 API,<1 ms 誤差(取決于 leeway ) | 由 RunLoop 驅動,誤差受 RunLoop 阻塞/滾動 影響 |
延遲風險 | 隊列不阻塞就能準時;可 DISPATCH_TIME_NOW + interval 精確起始 | UI 滑動等切換到 UITrackingRunLoopMode 時會 暫停,易錯過觸發 |
暫停/恢復 | dispatch_suspend / |