RunLoop面试题

作者: Mr吴标 | 来源:发表于2016-05-20 10:42 被阅读754次

1、什么是RunLoop?
2、开发中如何使用RunLoop?什么应用场景?
3、RunLoop和线程有什么关系?
4、RunLoop的Mode作用是什么?
5、RunLoop的实现原理和数据结构,什么时候会用到?
6、RunLoop的基本概念,它是什么时候休眠的?
7、自动释放池在什么时刻释放(一个autorelease对象在什么时候释放)?
8、objc使用什么机制管理内存对象?
9、猜想runloop内部是如何实现的?

参考答案
1、什么是 Runloop?
从字面上讲就是运行循环。
它内部就是do-while循环,在这个循环内部不断地处理各种任务。
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)
RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source(Sources0、Sources1)、Timer,那么就直接退出RunLoop
基本的作用就是保持程序的持续运行,处理app中的各种事件。通过runloop,有事运行,没事就休息,可以节省cpu资源,提高程序性能。

Runloop对象
iOS中有2套API来访问和使用RunLoop
Foundation:NSRunLoop
Core Foundation:CFRunLoopRef
NSRunLoop和CFRunLoopRef都代表着RunLoop对象
NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API。

3、Runloop与线程
每条线程都有唯一的一个与之对应的RunLoop对象
主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
RunLoop在第一次获取时创建,在线程结束时销毁
获得RunLoop对象
Foundation
[NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象
[NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象

Core Foundation
CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象
CFRunLoopGetMain(); // 获得主线程的RunLoop对象

RunLoop相关类
Core Foundation中关于RunLoop的5个类
CFRunLoopRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef
CFRunLoopObserverRef

相关文章

  • iOS底层面试题--RunLoop

    什么是RunLoop? iOS底层面试题--RunLoop RunLoop面试题分析

  • iOS RunLoop 总结以及相关面试题解答

    iOS RunLoop 总结以及相关面试题解答 iOS RunLoop 总结以及相关面试题解答

  • runloop 介绍

    iOS面试题之runloop 阅读目录 1.runloop是什么/runloop的概念? 2.NSRunLoop ...

  • runloop 面试题

    runloop 面试题 基于最近的几次面试,整理了runloop 的相关知识 1、Runloop 是什么?Run ...

  • 探寻RunLoop的本质

    iOS底层原理总结 - RunLoop 面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑...

  • NSRunLoop

    RunLoop运行逻辑 RunLoop面试题: 1、什么是RunLoop? 答:从字面意思上:运行循环、跑圈。 其...

  • RunLoop数据结构、RunLoop的实现机制、RunLoop

    推荐阅读:备战2020——iOS全新面试题总结 RunLoop概念 RunLoop的数据结构 RunLoop的Mo...

  • iOS底层原理总结 - RunLoop

    面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? Runloop和线程的关系? tim...

  • 浅谈RunLoop

    面试题 讲讲runloop,项目中有用到吗? runloop内部实现逻辑 runloop和线程的关系 timer和...

  • RunLoop

    面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? Runloop和线程的关系? tim...

网友评论

  • 梁森的简书:runLoop的应用场景? 不知道能得到回复吗?😄
  • iCoder_木子弋:“如果当前Mode中没有任何Source(Sources0、Sources1)、Timer,那么就直接退出RunLoop” 这个时候runLoop应该是休眠而不是退出吧???

本文标题:RunLoop面试题

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