iOS的定時器用法

    定時器在項目中仍是常常用到的,不少狀況下爲了省事咱們都是在主線程中直接用,但這樣常常會形成阻塞,影響定時器的準確性,對時間精度要求比較高的地方還會給人很很差的體驗,好比卡頓等等,因此,定時器的使用最好放在子線程中,下面就記錄幾種定時器的用法:多線程

一、NSThreadoop

  NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(newThread) object:nil];
  [thread start];
    
 - (void)newThread{
    @autoreleasepool{
        [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(requestMessages) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] run];
        }
}

二、GCDui

首先定義timer:spa

    這裏有一點疑惑:timer若做爲成員變量(定義放在@interface裏面)定時器能夠正常使用,可是在方法裏面再去定義的定義的話定時器就徹底不起做用了,還請知道的緣由的小夥伴多多指教:
線程

NSTimeInterval period = 60.0; //設置時間間隔
    
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    _timers = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    
    dispatch_source_set_timer(_timers, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0);
    
    dispatch_source_set_event_handler(_timers, ^{
        //在這裏執行事件
        kDLOG(@"定時時間到");
        [self requestMessages];
    });
    
    dispatch_resume(_timers);

GCD的形式有不少種,下面再列舉兩種:code

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    _timers = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
    uint64_t interval = (uint64_t)(10.0 * NSEC_PER_SEC);
    dispatch_source_set_timer(_timers, start, interval, 0);
    // 設置回調
    dispatch_source_set_event_handler(_timers, ^{
        kDLOG(@"多線程定時時間到");
        [self requestMessages];
    });
    // 啓動定時器
    dispatch_resume(_timers);

uint64_t interval = 3 * NSEC_PER_SEC;
    dispatch_queue_t queue = dispatch_queue_create("my queue", 0);
    _timers = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_timers, dispatch_time(DISPATCH_TIME_NOW, 0), interval, 0);
    
    dispatch_source_set_event_handler(_timers, ^(){
        kDLOG(@"定時時間到");
         });
    dispatch_resume(_timers);
相關文章
相關標籤/搜索