美文网首页
RunLoop基本概念

RunLoop基本概念

作者: Code_人生 | 来源:发表于2019-09-30 14:01 被阅读0次

一、RunLoop是什么?

  • 运行循环
  • 是个结构体、是个对象,这个对象提供了一个入口函数
  • 程序会进入 do..while循环
  • 循环处理一些事情

二、Runloop的作用

  • 保持程序的持续运行
  • 处理APP中的各种事件(触摸、定时器、performSelector)
  • 节省cpu资源、提高程序的性能; 该做事就做事,该休息就休息。类似如下代码
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        while (1) {
            NSLog(@"hello");
            static int a = 0;
            if (a == 50000) {
                sleep(30);
            }
            NSLog(@"======%d======",a);
            a += 1;
        }
    }
    return 0;
}
  1. 保证线程不退出。
  2. 负责监听所有的事件(iOS中的触摸、时钟、网络事件)
  3. RunLoop负责绘制UI

三、Runloop的item

  • block应用:__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__
  • 调用timer:__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
  • 响应source0:__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
  • 响应source1: __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
  • GCD主队列:__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
  • observer源:__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__

RunLoop 处理的事件
static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__();
static void __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__();
static void __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__();

四、runloop与线程的关系

Runloop:线程.png
  • 一一对应关系, 通过一个全局可变CFMutableDictionaryRef(就是key-value)
  • runloop的创建, __CFRunLoopCreate(pthread_main_thread_np())
  • runloop 存储, CFDictionarySetValue(dict, pthreadPointer(pthread_main_thread_np()), mainLoop);
  • runloop 获取, CFDictionaryGetValue(__CFRunLoops, pthreadPointer(t))
  1. 线程 -- runloop -- timer
  2. 子线程runloop 默认不开启
  3. timer 依赖于runloop
RunLoop的金典.png
Runloop结构.png
  • NSDefaultRunLoopMode:App默认mode,通常主线程在这个mode下运行
  • UITrackingRunLoopMode:界面跟踪mode,用于ScrollView跟踪触摸滑动,保证滑动时不受其他mode影响
  • NSRunLoopCommonModes:占位用的mode,不是一个真正的mode,相当于NSDefaultRunLoopMode+UITrackingRunLoopMode
  • UIInitializationRunLoopMode(系统初始化模式):刚启动App时进入的第一个mode,启动完成之后不再使用
  • GSEventReceiveRunLoopMode(系统内核模式):接受系统事件的内部mode,通常用不到
Runloop机制.png
RunLoop的结构.png
RunLoop的原理.png

RunLoop简易执行流程

相关文章

  • RunLoop

    基本概念RunLoop相关类RunLoop的作用RunLoop和线程的关系RunLoop和autoreleasep...

  • RunLoop

    一、RunLoop的基本概念: runloop从字面的意思来看就是:运行循环。 runloop的基本作用: 1、保...

  • IOS---实例化讲解RunLoop

    实例化讲解RunLoop 之前看过很多有关RunLoop的文章,其中要么是主要介绍RunLoop的基本概念,要么是...

  • RunLoop

    一、RunLoop基本概念 RunLoop从字面意思上看:运行循环跑圈 RunLoop的基本作用:保持程序的持续运...

  • RunLoop

    1.Runloop基础知识 (RunLoop可以理解为就是为多线程而存在的) 1.1 RunLoop基本概念:运行...

  • RunLoop应用

    一、RunLoop基本概念RunLoop从字面意思上看:运行循环跑圈RunLoop的基本作用:保持程序的持续运行处...

  • RunLoop 详解

    一、RunLoop简介 1、基本概念和原理   RunLoop 是通过内部维护的事件循环(Event Loop)来...

  • iOS开发 ☞ RunLoop使用

    runloop基本概念 Runloop 是什么?Runloop 还是比较顾名思义的一个东西,说白了就是一种循环,只...

  • RunLoop面试相关知识

    一、RunLoop基本概念 Runloop 是什么?Runloop 还是比较顾名思义的一个东西,说白了就是一种循环...

  • RunLoop

    一.基本概念及用途 1.runloop是什么? 1)字面意思:跑圈.2)runloop是一个do while 循环...

网友评论

      本文标题:RunLoop基本概念

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