GCD定時器

GCD定時器

#####1.1.GCD定時器基本應用oop

-(void) baseGCD{
    //建立一個GCD定時器
    //<#dispatch_source_type_t type#>  DISPATCH_SOURCE_TYPE_TIMER
    self.timer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0 ));
    //設置定時器何時起動,間隔是多少
    dispatch_source_set_timer(self.timer, DISPATCH_TIME_NOW, 2.0*NSEC_PER_SEC, 0);
    //設置定時器要作的事情
    dispatch_source_set_event_handler(self.timer, ^{
        NSLog(@"start --v%@",[NSThread currentThread]);
    });
    //定時器默認是沒有啓動的,因此要託運啓動
    dispatch_resume(self.timer);
}

#####2.1.增強版GCDui

int count=0;
-(void) GCD{

    //GCD不受runLoop模式的影響

    dispatch_queue_t queue=dispatch_get_global_queue(0, 0);

    //建立一個GCD定時器
    //DISPATCH_SOURCE_TYPE_TIMER
    self.timer=dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    //設置定時器何時起動,間隔是多少
    //when:什麼時候開始
    dispatch_time_t start=dispatch_time(DISPATCH_TIME_NOW, 3.0*NSEC_PER_SEC);
    //間隔
    uint64_t interval=2.0*NSEC_PER_SEC;

    dispatch_source_set_timer(self.timer, start, interval, 0);
    //設置定時器要作的事情
    dispatch_source_set_event_handler(self.timer, ^{
        NSLog(@"start --v%@",[NSThread currentThread]);
        //執行五次後自動釋放gcd
        count++;
        if (count>4) {
            dispatch_cancel(self.timer);
            self.timer=nil;
        }
    });
    //定時器默認是沒有啓動的,因此要託運啓動
    dispatch_resume(self.timer);
}
相關文章
相關標籤/搜索