美文网首页iOS学习iOS开发
runloop的简单理解

runloop的简单理解

作者: 快乐的tomato | 来源:发表于2017-09-22 10:10 被阅读39次

问题引出:

当点击一个button的时候,是button调用这个方法,还是谁在调用这个方法?为什么会调用到这个方法?
先来看一段代码

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        
            NSLog(@"hello world");
    return 0;
}

上面一段代码运行之后就结束了,如果再次打印,需要打开再跑一遍。但是我们写的app程序运行之后是不会结束的,除非我们去双击home键去滑掉。那么我们的app不会主动结束是怎么实现的呢?
如果想让上述代码不结束,我们可以加一个while语句,代码如下:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        int i = 0;
        // 死循环
        while (YES) {
            printf("请输入一个整数,0表示退出:");
            scanf("%d", &i);
            NSLog(@"%d", i);
            
            if (i == 0) {
                break;
            }
        }
    }
    
    return 0;
}

一、what

runloop的字面理解的意思是跑圈,循环。它的作用就类就类似于上面代码While代码的作用。
一般情况下在iOS 开发中用不到,因为系统都给我们封装好了。

示意图一 示意图二.png

二、runloop的作用(目的)

  • 保证程序不退出
  • 负责监听事件,iOS中触摸,时钟,网络事件等等
  • 如果没有事情发生,就会进入休眠状态,节约性能

runloop有以下3个部分


image.png
2.1CFRunLoopTimer

上代码

  NSTimer *timer =  [NSTimer timerWithTimeInterval:3 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
  //告诉runloop.
  [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

RunLoop有5种模式,以下3种最常用

  • NSDefaultRunLoopMode //苹果建议放时钟和网络事件
  • UITrackingRunLoopMode //优先级最高,只有UI事件才能唤醒
  • NSRunLoopCommonModes //默认包括上面第一和第二,占位模式,并不是一个真正的模式

注意:如果在同一个线程中,UIUITrackingRunLoopMode事件优先级最高,会阻碍NSDefaultRunLoopMode ,造成卡顿现象,解决的方法是添加NSRunLoopCommonModes

2.2CFRunLoopSource

Source 事件源
按照函数调用栈可以分为2类

  • source0
    处理App内部事件,App自己负责管理(触发),如UIEvent,CFSocket
  • source1
    由RunLoop和内核管理,Mach port驱动 如CFMach、CFMessage
2.3CFRunLoopObserver

三、runloop的深入理解

下面是一位简友的理解iOS runloop
我在网上看了一下@sunnnyxx 关于runloop的视频, http://v.youku.com/v_show/id_XODgxODkzODI0.html 或者搜索:iOS线下分享《RunLoop》by 孙源@sunnyxx

这个简友写的不错IOS---实例化讲解RunLoop
iOS---RunLoop深度剖析

三、利用Runloop进行性能优化

iOS-Runloop常驻线程/性能优化

三、runloop相关的面试题

1.阿里一面 runloop内部实现逻辑

相关文章

  • runloop简单理解

    CFRunLoopModeRunLoop在同一时段只能且必须在一种特定Mode下Run更换Mode时, 需要暂停当...

  • 简单理解runloop

    runloop runloop就是苹果提供的一个循环机制,其内部本质是do-while来实现的. 为什么电脑或手机...

  • runloop的简单理解

    问题引出: 当点击一个button的时候,是button调用这个方法,还是谁在调用这个方法?为什么会调用到这个方法...

  • Runloop分析

    RunLoop 参考:深入理解RunLoop ibireme:《深入理解RunLoop》 Runloop 的概念 ...

  • RUNLOOP 理解简单总结

    这篇文章主要介绍 iOS开发中非常重要的对象 : Runloop 。 中文名 : 运行循环 根据苹果官方文档的说明...

  • RunLoop

    RunLoop简单概述 RunLoop相关类 RunLoop逻辑处理 RunLoop实践 RunLoop简单概述 ...

  • NSRunLoop

    深入理解RunLoop RunLoop深度探究(一) RunLoop深度探究(二) RunLoop深度探究(三) ...

  • iOS知识点(10)RunLoop

    深入理解RunLoop iOS---实例化讲解RunLoop iOS runloop iOS-RunLoop充满灵...

  • iOS 各种技术点网址

    RunLoop 深入理解RunLoop(作者 :ibireme)iOS线下分享《RunLoop》by 孙源@sun...

  • Runloop 详解

    Runloop 详解 参考链接: 深入理解RunLoop CFRunLoop 概念 runloop :是管理和处理...

网友评论

    本文标题:runloop的简单理解

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