zoukankan      html  css  js  c++  java
  • GCD定时器

    
    

    GCD定时器的优势:不受RunLoop的运行模式的影响(因为它的底层也是C语言)

    
    

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

    
    

    但是记得relaease

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

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

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

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

    
    

    如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入

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

    
    

    一个 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
  • 相关阅读:
    CF110A Nearly Lucky Number
    Max Sum Plus Plus HDU – 1024
    洛谷 p1003 铺地毯
    poj-1226
    Where is the Marble? UVA – 10474
    Read N Characters Given Read4
    Guess Number Higher or Lower && 九章二分法模板
    Intersection of Two Arrays II
    Reverse Vowels of a String
    Meeting Rooms
  • 原文地址:https://www.cnblogs.com/mshong1616/p/5096512.html
Copyright © 2011-2022 走看看