美文网首页
timer、CADisplayLink、dispatch_sou

timer、CADisplayLink、dispatch_sou

作者: code_牧轩 | 来源:发表于2021-01-18 18:09 被阅读0次

    1.CADisplayLink

      保证调用频率和屏幕的刷帧频率一致,1秒调用60次;

    2.timer

     NSTimer依赖Runloop,如果runloop的任务过于繁重的话,就不准时了。

      runloop每跑一圈话费的时间是不固定;

        GCD的定时器是不依赖runloop的比较准时;

    //  会发生循环引用;

        self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(linkTest)];

        [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[LZHProxy proxyWith:self] selector:@selector(linkTest) userInfo:nil repeats:YES];

    // 解决循环引用方法一:

        __weaktypeof(self) weakSelf =self;

        self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {

            [weakSelflinkTest];

        }];

    //消息转发机制;

    //    NSProxy 

    // GCD的定时器

        NSLog(@"begin");

    //  创建定时器  :如果队列是非主队列,会自动放入子线程执行任务定时器‘

        dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,dispatch_get_main_queue());

    //  设置定时器的时间;

        uint64_tstart =2.0;//2秒后开始执行

        uint64_tinterval =1.0;//每隔1秒执行

        dispatch_source_set_timer(timer,dispatch_time(DISPATCH_TIME_NOW, start*NSEC_PER_SEC), interval * NSEC_PER_SEC, 0);

    //  设置回调函数

        dispatch_source_set_event_handler(timer, ^{

            NSLog(@"-----");

        });

        dispatch_source_set_event_handler_f(timer,timerFire);

    //  启动定时器

        dispatch_resume(timer);

    相关文章

      网友评论

          本文标题:timer、CADisplayLink、dispatch_sou

          本文链接:https://www.haomeiwen.com/subject/xwbxzktx.html