CFRunLoop

作者: 小行为 | 来源:发表于2018-11-27 19:05 被阅读8次

CFRunLoop 数据结构

屏幕快照 2018-11-27 下午6.32.48.png 屏幕快照 2018-11-27 下午6.33.18.png
CFRunLoopMode数据结构
屏幕快照 2018-11-27 下午6.35.28.png

name: NSDefaultRunLoopMode(对应mode名称)
集合结构:
source0: 手动唤醒线程
source1: 具备唤醒线程的能力
数组结构:
CFRunLoopTimer : 基于事件的定时器
CFRunTimeObservers: 观测时间点等


观测时间点
观测时间点
各个数据结构之前的关系
一对多关系
RunLoop的Mode
RunLoop的Mode 多种model

如何把一个timer添加到多个mode上 ???

NSRunLoopCommonModes的用途

事件循环的实现机制

事件循环的实现机制

RunLoop的核心

核心态到用户态的切换

RunLoop与 NSTimer相关面试问题

如何把NSTimer同步添加到多个Mode上的??


把NSTimer同步添加到多个Mode源码实现 添加commonMode

RunLoop和多线程相关问题

static NSThread *thread = nil;
// 标记是否要继续事件循环
static BOOL runAlways = YES;

+ (NSThread *)threadForDispatch{
    if (thread == nil) {
        @synchronized(self) {
            if (thread == nil) {
                // 线程的创建
                thread = [[NSThread alloc] initWithTarget:self selector:@selector(runRequest) object:nil];
                [thread setName:@"com.imooc.thread"];
                //启动
                [thread start];
            }
        }
    }
    return thread;
}
+ (void)runRequest
{
    // 创建一个Source
    CFRunLoopSourceContext context = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
    CFRunLoopSourceRef source = CFRunLoopSourceCreate(kCFAllocatorDefault, 0, &context);
    
    // 创建RunLoop,同时向RunLoop的DefaultMode下面添加Source
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
    
    // 如果可以运行
    while (runAlways) {
        @autoreleasepool {
            // 令当前RunLoop运行在DefaultMode下面
            CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0e10, true);
        }
    }
    
    // 某一时机 静态变量runAlways = NO时 可以保证跳出RunLoop,线程退出
    CFRunLoopRemoveSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
    CFRelease(source);
}

相关文章

  • RunLoop(1)

    __CFRunLoop __CFRunLoopMode __CFRunLoopSource __CFRunLoop...

  • CFRunLoop

    CFRunLoop 数据结构 CFRunLoopMode数据结构 name: NSDefaultRunLoopM...

  • CFRunLoop

    数据结构 __CFRunLoopMode __CFRunLoop __CFRunLoops 函数: __CFRun...

  • RunLoop源码

    一、CFRunLoop.c 源码 __CFRunLoop __CFRunLoopMode 二、源码探索(一) CF...

  • CFRunLoop -- 概述

    缘由: 或许也许大概是因为写业务太无聊了,决定和新来的同事一起搞点事情。最后我们决定根据官方文档整理一下 CFRu...

  • CFRunLoop -- API

    获取 Run Loop 的方法 运行以及停止 Run Loop 的方法 管理 Sources 的方法 管理 Obs...

  • iOS RunLoop

    参考文章 CFRunLoop.c

  • CFRunLoop总览翻译

    总览一个CFRunLoop对象监控事务的输入源,并当他们准备好时进行调度处理。输入源包括用户输入设备、网络联接、定...

  • 新建 NSThread CFRunLoop

    runLoop 的工作流程 序号说明对应的方法 在命令行bt 可以打印堆栈信息1通知Observers:进入Loo...

  • RunLoop的数据结构

    NSRunnLoop(Foundation)是CFRunLoop(CoreFoundation)的封装,提供了面向...

网友评论

      本文标题:CFRunLoop

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