GCD定時器替換NSTimer不準的問題
1.NSTimer會受到RunLoop中Modes的影響;
2.GCD建立的定時器不受RunLoop中Modes影響;
// 如果在子執行緒中建立Timer,那麼當我們add到RunLoop的時候有NSDefaultRunLoopMode和
// NSRunLoopCommonModes兩種模式可以選擇
// 這裡不像主執行緒,子執行緒需要建立loop並且run起來,不然是不會連續跑任務的
// 不準的原因在於,當我們在NSDefaultRunLoopMode模式下跑的時候,我們滾動例如TableView的時候切換到
// TrackingMode,loop會退出當前mode,重新進入指定的mode,如果NSTimer不是加到NSRunLoopCommonModes
// 那麼任務跑起來一直在切換,肯定會不準
NSTimer *timer= [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(timerRun) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
GCD建立定時器
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// @property (nonatomic,strong) dispatch_source_t timer;
/**
建立一個定時器(dispatch_source_t本質還是個OC物件)
<OS_dispatch_source: 0x6080001d3b00>
引數1:代表建立一個定時器
引數4:佇列
這裡的強引用是因為,當我定時器延時幾秒呼叫的時候,區域性變數就死了,我們需要強引用起來
*/
self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
/**
設定定時器
引數1:定時器物件
引數2:GCD dispatch_time_t 裡面的都是納秒 建立一個距離現在多少秒開啟的任務
引數3:間隔多少秒呼叫一次
*/
dispatch_source_set_timer(self.timer, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), (uint64_t)(1.0 * NSEC_PER_SEC), 0);
// 設定回撥
dispatch_source_set_event_handler(self.timer, ^{
NSLog(@"定時器%@",[NSThread currentThread]);
});
// 啟動
dispatch_resume(self.timer);
}
相關文章
- GCD計時器替換NSTimerGC
- workerman定時器問題定時器
- PHP 替換了檔案但是不生效的問題!(Opcache 的一個坑)PHPopcache
- 全域性替換 ‘/home’ 為 ‘/’ 的問題解決!
- js replace替換字串,同時替換多個方法JS字串
- github打不開替換域名Github
- 定時任務裡面事務不生效問題
- 定時器(setTimeout/setInterval)最小延遲的問題定時器
- 此處解決 CocoaPods 替換最新源的問題
- Ubuntu 時間不準,怎麼設定NTP時間同步?Ubuntu
- Es資料彙總不準確的問題
- App\User 替換為 App\Models\User 的問題解決!APP
- Django的時區設定問題Django
- 實踐敏捷估算(1)——不僅僅是估不準的問題敏捷
- 完美解決setInterval在瀏覽器切換時加速的問題瀏覽器
- Maven解決repository不更換的問題Maven
- iOS-簡單易用的GCD計時器iOSGC
- sed 原地替換檔案時遇到的趣事
- [每日一題] 第十題:替換空格每日一題
- 當idea配置eclipse快捷鍵時,設定全域性替換的快捷鍵IdeaEclipse
- 【MySQL】order by 結果不準確的問題及解決MySql
- MySQL JDBC row_count()數字不準確的問題MySqlJDBC
- ETL過程中資料精度不準確問題
- win10 主題不換背景如何設定_win10設定主題不自動換背景的方法Win10
- Win10系統自動設定時間不準怎麼回事_Win10自動設定時間不準解決步驟Win10
- NSTimer詳解----使用、保留環問題、與runloop的關係OOP
- HTML 替換元素與非替換元素HTML
- GCD 容易讓人迷惑的幾個小問題GC
- GCD&&LCM的一些經典問題GC
- 關於時間轉換 SimpleDateFormat 的使用的問題ORM
- 請問怎麼替換公司網站網站
- 替換空格 將一個字串中的空格替換成“ ”字串
- 定時器以及定時器的幾個案例定時器
- iOS --NSDecimalNumber 處理計算精度不準確問題iOSDecimal
- vim的批量替換
- 【50】瞭解new和delete的合理替換時機delete
- hexo更換電腦時同步問題Hexo
- 定時器時間資料轉換子程式分析 (轉)定時器