iOS定時器使用

GCD方法

///定時器
@property (nonatomic,strong) dispatch_source_t timer;

例如:啟動頁倒計時

- (void)createTimerWithTime:(NSString *)time{
    
    //設(shè)置倒計時時間
    //通過檢驗發(fā)現(xiàn),方法調(diào)用后,timeout會先自動-1,所以如果從15秒開始倒計時timeout應(yīng)該寫16
    //__block 如果修飾指針時,指針相當于弱引用,指針對指向的對象不產(chǎn)生引用計數(shù)的影響

    __block int timeout = [time intValue]+1;
    
    //獲取全局隊列
    dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    //創(chuàng)建一個定時器,并將定時器的任務(wù)交給全局隊列執(zhí)行(并行,不會造成主線程阻塞)
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, global);
    
    self.timer = timer;
    
    //設(shè)置觸發(fā)的間隔時間
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);

    WS(weakSelf);
    
    //設(shè)置定時器的觸發(fā)事件
    dispatch_source_set_event_handler(timer, ^{
        
        //1. 每調(diào)用一次 時間-1s
        timeout --;
        
        if (timeout <= 0) {
            
            //關(guān)閉定時器
            dispatch_source_cancel(timer);
        
            //在主線程中對button進行修改操作
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [weakSelf.timeButton setTitle:@"跳過" forState:UIControlStateNormal];
                
                [weakSelf delayedLoadVC];
            
            });
        }else {
            
            //處于正在倒計時,在主線程中刷新button上的title,時間-1秒
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [weakSelf.timeButton setTitle:[NSString stringWithFormat:@"跳過 %d",timeout] forState:UIControlStateNormal];
            });
        }
        
        
    });
    
    dispatch_resume(timer);
}

關(guān)閉定時器

dispatch_source_cancel(self.timer);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. NSTimer NSTimer的初始化方法有以下幾種: 會自動啟動, 并加入* MainRunloop*的*...
    codeshow閱讀 600評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,663評論 1 32
  • 一、什么是假敏捷和真敏捷? 在變幻莫測的互聯(lián)網(wǎng)環(huán)境下,快速的響應(yīng)和發(fā)布是非常必要的,并且能得到ABtest的快速驗...
    北嶺有狐閱讀 699評論 0 1
  • Ctrl+shift+A 自動對齊 cpp 代碼
    星星之火666閱讀 1,717評論 0 0
  • 因為我知道了,心是這世界,促人成功的力量之源,心是我克服懶惰的動力之源,今天是我生命中最美好的一天,因為我擁有了強...
    宋華英閱讀 555評論 0 0

友情鏈接更多精彩內(nèi)容