详解RunLoop之面试题

栏目: IOS · 发布时间: 5年前

内容简介:就是下图所示的,用自己话总结出来就好
  • 什么是Runloop
  • ios程序中 main函数为什么不会退出
  • runloop和线程的关系?
  • 程序中添加每3秒响应一次的NSTimer,当拖动tableview时timer可能无法响应要怎么解决?
  • runloop内部实现逻辑?
  • runloop 是怎么响应用户操作的, 具体流程是什么样的?
  • 说说runLoop的几种状态
  • runloop的mode作用是什么?
  • 如何实现一个常驻线程

什么是Runloop

  • Runloop 还是比较顾名思义的一个东西,说白了就是一种循环,只不过它这种循环比较高级。一般的 while 循环会导致 CPU 进入忙等待状态,而 Runloop 则是一种“闲”等待,这部分可以类比 Linux 下的 epoll。当没有事件时,Runloop 会进入休眠状态,有事件发生时, Runloop 会去找对应的 Handler 处理事件。Runloop 可以让线程在需要做事的时候忙起来,不需要的话就让线程休眠
  • RunLoop是通过通过内部维护的时间循环来对事件/消息进行管理的一个对象
    • 没有消息需要处理时,休眠避免掉资源占用
      • 用户态 -> 内核态
    • 有消息时候,立刻被唤醒
      • 内核态 -> 用户态
        详解RunLoop之面试题

ios程序中 main函数为什么不会退出

  • main函数内部调用 UIApplicationMain 这个方法会启动一个RunLoop,有事做就做事,没事做就等待,保持不会退出

runloop和线程的关系?

+ 每条线程都有唯一的一个与之对应的RunLoop对象
+ RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value
+ 线程刚创建时并没有RunLoop对象,RunLoop会在第一次获取它时创建
+ RunLoop会在线程结束时销毁
复制代码

runloop内部实现逻辑?

就是下图所示的,用自己话总结出来就好

详解RunLoop之面试题

程序中添加每3秒响应一次的NSTimer,当拖动tableview时timer可能无法响应要怎么解决?

  • 常见的2种Mode

  • kCFRunLoopDefaultMode(NSDefaultRunLoopMode):App的默认Mode,通常主线程是在这个Mode下运行

  • UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响

  • common模式下(一个占位用的Mode,不是一种真正的Mode) 可以兼容以上两种模式

runloop 是怎么响应用户操作的, 具体流程是什么样的?

  • source1 捕捉用户触摸事件
  • source0去处理触摸时间

说说runLoop的几种状态

  • kCFRunLoopEntry = (1UL << 0), // 即将进入Loop
  • kCFRunLoopBeforeTimers = (1UL << 1), //即将处理Timer
  • kCFRunLoopBeforeSources = (1UL << 2), //即将处理Source
  • kCFRunLoopBeforeWaiting = (1UL << 5), //即将进入休眠
  • kCFRunLoopAfterWaiting = (1UL << 6), //刚从休眠中唤醒
  • kCFRunLoopExit = (1UL << 7), //即将退出Loop
  • kCFRunLoopAllActivities = 0x0FFFFFFFU //所有状态改变

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

自媒体之道

自媒体之道

吴晨光 / 中国人民大学出版社有限公司 / 2018-7-31 / CNY 49.80

内容简介: 《自媒体之道》为你解决四个问题: 1. 一篇10万+的刷屏文章是怎么写出来的? 2. 一支10万+的爆款视频是怎么做出来的? 3. 一个100万+粉丝的大号是怎么运营的? 4. 神秘的人工智能(AI)和备受争议的算法是怎么运行的? 这部超过30万字的著作,集纳了中国顶尖自媒体人和平台运营者3年的实操经验。全书13章,详解案例150+,提炼“锦囊秒句”......一起来看看 《自媒体之道》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具