美文网首页
Runloop的认识

Runloop的认识

作者: 畵_460e | 来源:发表于2019-12-31 13:59 被阅读0次
一:什么是Runloop(面试题:什么是RunLoop?项目中有用到吗?)

顾名思义,运行循环,在程序运行过程中循环做一些事情,应用范畴:定时器timer、PerformSelector、GCD、事件响应、手势识别、界面刷新、网络请求、AutoreleasePool,runloop的基本作用就是保持程序的持续运行,处理APP中的各种事件,接受省CPU资源,提高程序性能,该做事的时候做事,该休息的时候休息

二:runloop与线程的关系(面试题:RunLoop和线程的关系)

每个线程都有唯一一个与之对应的runloop,runloop保存在一个全局的NSDictionary中,key是线程,value是runloop,线程刚创建的时候并没有runloop,runloop会在第一次获取它的时候创建,同事runloop会在线程结束的时候销毁,主线程的runloop已经自动获取创建,子线程的runloop默认情况下没有创建

三:runloop相关的5个类(面试题:timer和RunLoop的关系)

Core Foundation中关于Runloop的5个类

1.CFRunLoopRef
2.CFRunLoopModeRef
3.CFRunLoopSourceRef
4.CFRunLoopTimerRef
5.CFRunLoopObserveRef

   typedef struct __CFRunLoopRef * CFRunLoopRef
    struct __CFRunLoop {
          pthread_t _pthread;
          CFMutableSetRef _commonModes;
          CFMutableSetRef _commonModeItems;
          CFRunLoopModeRef _currentModes;
          CFMutableSetRef _modes
    }

  typedef struct __CFRunLoopMode *CFRunLoopModeRef
  struct __CFRunLoopMode {
    CFStringRef _name;
    CFMutableSetRef _sources0;
    CFMutableSetRef _sources1;
    CFMutableArrayRef _observers;
    CFMutableArrayRef _timers;
  }
RunLoop结构关系.jpeg

Runloop中有mode数组,每个modes中有sources0、sources1、observers、timers需要处理

六:runloop的observers监听状态(面试题:runLoop的几种状态) Runloop的监听状态.jpeg
七:runloop的运行模式modes

CFRunLoopModeRef代表RunLoop的运行模式,一个RunLoop包含若干个mode,每个mode中都含有若干个source0、source1、Observer、timer,RunLoop启动时只能选择一个mode作为currentMode,如果需要切换mode,那么只退出当前Loop,再重新选择一个mode进入,这样做的话是同一时间内只能处理一个mode下的sources、Observer、timer,将不同的mode下的sources、Observer、timer区分开来,互不影响,如果没有任何的sources、Observer、timer,那么RunLoop会立马退出

八:RunLoop的运行逻辑(面试题:RunLoop的内部实现逻辑、RunLoop是怎样相应用户操作的,具体流程是怎样的)

1.Source0:触摸时间处理、performSelctor:onThread:
2.Source1: 基于Port的线程间的通信、系统时间的捕捉
3.Times:NSTimer、performSelector:WithObject:afterDelay:
4.Observers:用于监听RunLoop的状态、UI刷新、Autorelease pool


Runloop的运行逻辑图解.jpeg
九:RunLoop在实际发开中的应用

1.控制线程声明周期(线程保活),可查看核心代码
在线程中开启RunLoop,想要执行的任务也必须在子线程中执行

  self.thread = [[MYThread alloc] initWithBlock:^{
        NSLog(@"----start----");
        [[NSRunLoop currentRunLoop] addPort:[[NSPort alloc] init] forMode:NSDefaultRunLoopMode];
        while (weakSelf && !weakSelf.stopped) {
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
        }
        NSLog(@"----end----");
    }];
    [self.thread start];

2.解决NSTimer在滑动时停止工作的问题,放到commonMode下
3.监控应用卡顿
4.性能优化

相关文章

  • 14-RunLoop-01

    一、RunLoop的认识 二、RunLoop对象 RunLoop源码: 三、RunLoop相关类 切换mode不会...

  • Runloop的认识

    一:什么是Runloop(面试题:什么是RunLoop?项目中有用到吗?) 顾名思义,运行循环,在程序运行过程中循...

  • 认识RunLoop

    一、认识RunLoop 1.什么是RunLoop? RunLoop,顾名思义就是运行循环或者跑圈。iOS之所以可以...

  • 教你如何轻松搞定 Runloop

    认识 Runloop Runloop 就是运行循环,如果没有 Runloop,程序一运行就会退出,有 Runloo...

  • Hi,runloop 交个朋友吧

    developer:hi,runloop 初次见面,交个朋友吧?runloop:你好,很高兴认识你! develo...

  • RunLoop的基本认识

    RunLoop的介绍 什么是RunLoop? Xcode执行程序的时候就先从Main函数那里开始执行的,Main函...

  • 简单明了认识iOS中的RunLoop (持续更新,常学常新,精益

    为了常学常新,精益求精,我的所有文章都会持续更新 为了简单明了的认识RunLoop, 本篇文章不讲述RunLoop...

  • NSTimer学习笔记

    一、NSTimer认识 NSTimer其实是将一个监听加入到系统的RunLoop中去,当系统runloop到如何t...

  • iOS RunLoop 初步认识

    参考详情连接 大神连接 1. RunLoop 概念 在iOS中一个app只能开启一个进程,然后又一个主线程,可以开...

  • 三十二、Runloop之(一) Runloop的基本认识

    Runloop相关面试题 1.什么是Runloop? 顾名思义,运行循环,即在程序运行过程中一直循环做某些事情。应...

网友评论

      本文标题:Runloop的认识

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