RunLoop篇

作者: 清风徐来121 | 来源:发表于2020-10-28 10:22 被阅读0次
image.png image.png

main函数为什么是一直运行的?


image.png

RunLoop整个流程图


image.png image.png image.png image.png image.png
#import "MCObject.h"

@implementation MCObject

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);
}

@end
image.png

『RunLoop』详尽总结

相关文章

  • RunLoop介绍

    RunLoop三篇文章:RunLoop介绍篇RunLoop内部调用过程RunLoop应用篇 本篇包括以下内容: R...

  • RunLoop内部调用过程

    上一篇:RunLoop介绍篇下一篇:RunLoop应用篇 RunLoop的可执行底层源码已经放在这里了,需要看源码...

  • RunLoop应用篇

    基础理论请移步这两篇:RunLoop介绍篇RunLoop内部调用过程 一. runloop下timer,obser...

  • RunLoop 的相关概念

    此篇为对 RunLoop 的相关概念的总结,主要介绍 RunLoop 的一些概念 RunLoop 简介 RunLo...

  • RunLoop应用

    在我的另一篇文章RunLoop简单介绍了关于runLoop基础知识和NSTimer时runloop简单应用, 下面...

  • RunLoop篇

    main函数为什么是一直运行的? RunLoop整个流程图 『RunLoop』详尽总结[http://www.co...

  • iOS RunLoop理解

    在网上看到一篇对RunLoop讲述挺好的文章,在此记录一下深入理解RunLoop

  • iOS RunLoop进阶

    iOS RunLoop进阶 上一篇文章<从安卓的Looper到iOS RunLoop>谈论了安卓的Message,...

  • iOS进阶之深入了解Runloop

    前言 这边文章主要借鉴了ibireme 的一篇关于RunLoop文章,然后大体了解了RunLoop在整个iOS系统...

  • runtime 之runloop 源码实现

    从上一篇文章我们了解了runloop的基本结构,这一篇就讲解下源码。 RunLoop 的概念 一般来讲,一个线程一...

网友评论

    本文标题:RunLoop篇

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