yykit是一位大神出品的iOS開發(fā)三方庫朱嘴,本人計算機基礎(chǔ)薄弱溉知,在閱讀源碼過程中遇到一些困惑,自己在此作一些記錄腕够。今天就寫一篇YYTimer的學習筆記。
#define LOCK(...) dispatch_semaphore_wait(_lock, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \
dispatch_semaphore_signal(_lock);
這個宏聲明了一個LOCK的函數(shù)舌劳,(...)表示傳遞的是可變參數(shù)帚湘,這是c語言中的語法。__VA_ARGS__表示列出可變參數(shù)甚淡,在該代碼中給LOCK傳遞的是表達式大诸。首位兩行的作用是防止多線程造成資源存取錯誤的一種同步機制捅厂。
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 如果semaphore計數(shù)大于等于1.計數(shù)-1,返回资柔,程序繼續(xù)運行焙贷。這里設(shè)置了一直等待。dispatch_semaphore_signal(semaphore);計數(shù)+1贿堰。這樣一次只有一個線程可以進入執(zhí)行代碼辙芍。
_source = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
dispatch_source_set_timer(_source, dispatch_time(DISPATCH_TIME_NOW, (start * NSEC_PER_SEC)), (interval * NSEC_PER_SEC), 0);
dispatch_source_set_event_handler(_source, ^{[_self fire];});
dispatch_resume(_source);
用dispatch_source在主線程創(chuàng)建了一個任務(wù)的定時調(diào)度。