美文网首页
iOS:runloop

iOS:runloop

作者: Liu____ | 来源:发表于2020-11-14 11:55 被阅读0次

    CFRunloop 优化TableView加载高清大图UI卡顿问题。单独分批加载

    https://cloud.tencent.com/developer/article/1383376

    https://www.jianshu.com/p/d260d18dd551

    • RunLoop 实际上是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行。
    • RunLoop 在没有事件处理的时候,会使线程进入睡眠模式,从而节省 CPU 资源,提高程序性能。

    runloopmode

    总共是有五种CFRunLoopMode:
    
    kCFRunLoopDefaultMode:默认模式,主线程是在这个运行模式下运行
    UITrackingRunLoopMode:跟踪用户交互事件(用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他Mode影响)
    kCFRunLoopCommonModes:伪模式,(kCFRunLoopDefaultMode,UITrackingRunLoopMode的合集)
    UIInitializationRunLoopMode:在刚启动App时第进入的第一个 Mode,启动完成后就不再使用
    GSEventReceiveRunLoopMode:接受系统内部事件,通常用不到
    
    
    

    runloop理解

    1,runloop为死循环
    2,主线程在main函数开启
    3,UITableView滚动加载图片优化

    [cell performSelector:@selector(setImage:) withObject:nil afterDelay:0.1 inModes:@[NSDefaultRunLoopMode]];
    

    4,定时器

     NSTimer *timer = [NSTimerscheduledTimerWithTimeInterval:.2target:selfselector:@selector(timerDone) userInfo:nilrepeats:YES];
        [[NSRunLoopcurrentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
    

    5,子线程需要开启runloop

     NSTimer *timer = [NSTimerscheduledTimerWithTimeInterval:.2target:selfselector:@selector(timerDone) userInfo:nilrepeats:YES];
      [[NSRunLoopcurrentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    
       [[NSRunLoop currentRunLoop] run];
    

    6,关闭runloop

            self.runLoop = CFRunLoopGetCurrent();
          [[NSRunLoop currentRunLoop] run];
         // 关闭runloop
          CFRunLoopStop(self.runLoop);// 关闭保持前后一致
    

    相关文章

      网友评论

          本文标题:iOS:runloop

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