GCD定时器

 
 

GCD定时器的优点:不受RunLoop的运行模式的影响(由于它的底层也是C语言)面试

 
 

Xcode自带的代码块保存的有,直接dispatch就出来;填入参数便可oop

 
 

可是记得relaeaseatom

它的的间隔时间是纳秒为单位,(面试)spa

注意:它本质是个结构体,若是没有定义一个属性用强指针应用它(strong),他会被销毁,指针


   
   
   
   

NStimer定时器:会受到RunLoop的运行模式的影响code

每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称做 CurrentModeserver

 
 

若是须要切换Mode,只能退出Loop,再从新指定一个Mode进入对象

这样作主要是为了分隔开不一样组的Source/Timer/Observer,让其互不影响blog

 
 

一个 RunLoop 包含若干个 Mode,每一个Mode又包含若干个Source/Timer/Observer队列

 
 

 


   
   
   
   

@interface
ViewController () @property (nonatomic ,strong)dispatch_source_t timer; // 注意:此处应该使用强引用 strong @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //0.建立队列 dispatch_queue_t queue = dispatch_get_main_queue(); //1.建立GCD中的定时器 /* 第一个参数:建立source的类型 DISPATCH_SOURCE_TYPE_TIMER:定时器 第二个参数:0 第三个参数:0 第四个参数:队列 */ dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); //2.设置时间等 /* 第一个参数:定时器对象 第二个参数:DISPATCH_TIME_NOW 表示从如今开始计时 第三个参数:间隔时间 GCD里面的时间 纳秒 第四个参数:精准度(表示容许的偏差,0表示绝对精准) */
Xcode的代码苦衷搜索Dispatch就有,不用敲
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    
    //3.要调用的任务
    dispatch_source_set_event_handler(timer, ^{
        NSLog(@"GCD-----%@",[NSThread currentThread]);
    });
    
    //4.开始执行
    dispatch_resume(timer);

    
    self.timer = timer;
}
@end
相关文章
相关标签/搜索