runloop mode应用

作者: 蓝苹果不是烂苹果 | 来源:发表于2016-07-13 21:19 被阅读27次
    亡羊补牢,为时不晚

    面试被问到,一直没有注意过,在此补上。

    问题描述

    控制器中存在定时器以及tableview,当滑动tableview时,定时器停止计时,tableview再次停止后,计时恢复。

    代码测试

    使用label显示计时情况


    计时
    方案一:将定时器添加到其他线程,并开启runloop
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(timeNumChange) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] run];
    });
    
    - (void)timeNumChange {
    
        self.count++;
        dispatch_async(dispatch_get_main_queue(), ^{
            self.timeNum.text = [NSString     stringWithFormat:@"runloop:%ld",self.count];
        
        });
    }
    
    方案二:将timer添加到指定mode(UITrackingRunLoopMode、NSRunLoopCommonModes)
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(timeNumChange) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:UITrackingRunLoopMode];
    
    - (void)timeNumChange {
    
    self.count++;
    self.timeNum.text = [NSString stringWithFormat:@"runloop:%ld",self.count];
    
    }
    

    最后转载一篇更详细的文章:深入理解RunLoop

    相关文章

      网友评论

        本文标题:runloop mode应用

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