美文网首页iOS面试
OC-RunLoop简单介绍

OC-RunLoop简单介绍

作者: SK丿希望 | 来源:发表于2019-03-29 14:04 被阅读0次

概念

运行循环
每个线程都有一个RunLoop对象,但是只有主线程的RunLoop是开启的。子线程中的RunLoop默认是不被创建的,在子线程中当我们调用NSRunLoop *runloop = [NSRunLoop currentRunLoop];获取RunLoop对象的时候,就会创建RunLoop
一个线程可以开启多个RunLoop,只不过都是嵌套在最大的RunLoop中

作用

使程序一直运行并接收用户的输入
决定程序在何时处理哪些事件
调用解耦(主调方产生很多事件,不用等到被调方处理完事件之后,才能执行其他操作)
节省CPU时间(当程序启动后,什么都没有执行的话,就不用让CPU来消耗资源来执行,直接进入睡眠状态)

NSRunLoopMode

每一个RunLoop都包含若干个CFRunLoopMode
在同一时间,只能在一种Mode下面执行
当需要切换Mode的时候,就必须退出当前的RunLoop。重新启动一个

  • 系统默认的有以下5种模式
  • kCFRunLoopDefaultMode: 默认 mode,也是空闲状态,通常主线程在这个 Mode 下运行。
  • UITrackingRunLoopMode: 追踪mode,保证Scrollview滑动顺畅不受其他 mode 影响。
  • UIInitializationRunLoopMode: 启动程序后的过渡mode,启动完成后就不再使用。
  • GSEventReceiveRunLoopMode: Graphic相关事件的mode,通常用不到。
  • kCFRunLoopCommonModes: 占位mode,包括了DefaultMode和CommonMode2种模式。

CFRunLoopMode又包含若干个CFRunLoopSource\ CFRunLoopTimer\ CFRunLoopObserver

  • CFRunLoopMode的应用案例

做图片轮播器的时候,自动轮播一般是使用NSTimer来完成,如果使用的是kCFRunLoopDefaultMode,那么当ScrollView滚动的时候,RunLoop模式就会切换为UITrackingRunLoopMode,这时候NSTimer就没法执行,这时候我们可以使用kCFRunLoopCommonModes,就可以解决这个问题。

以上来源

其他

  • runloop、autorelease pool以及线程之间的关系。

每个线程(包含主线程)都有一个Runloop。对于每一个Runloop,系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个像callstack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。

相关文章

  • OC-RunLoop简单介绍

    概念 运行循环每个线程都有一个RunLoop对象,但是只有主线程的RunLoop是开启的。子线程中的RunLoop...

  • OC-Runloop

    RunLoop 是什么 runloop 就是一个运行循环,目的是让程序运行起来不会直接结束,能在有任务的时候处理任...

  • OC-Runloop详解

    Runloop的概念 runloop是通过内部维护的事件循环来对事件/消息进行管理的一个对象。1、没有消息/事件需...

  • OC-RunLoop总结

    什么是RunLoop?RunLoop 的表象是保证线程一直存在的一个事件循环机制,本质是封装了一个可以接收消息处理...

  • 简单介绍

    【姓名】龙行 【城市】贵州人在北京 【职业】仪器开发 【标签】学习者 【公众号】暂无 【爱好】看书、深度思考、旅游...

  • 简单介绍

    这里momo 坐标古都 新手上路,多指教 会发一些日常或者自编的微故事 一般都是恐怖类型吧…… 不喜勿喷,毕竟刚入圈

  • 简单介绍

    第一次打开简书,我就把它当成我的日记本了,呵呵…就记录我和我的两个女儿的点点滴滴,陪伴他们,和她们一起成长。...

  • 简单介绍

    hadoop是什么 hadoop是一个由Apache基金会所开发的分布式系统基础框架 hadoop实现了一个分布式...

  • 简单介绍

    Hello 这里是一位对文字如痴如醉爱着的人。喜欢阅读,资历尚浅,学识浅薄,还请关照。 以后会不定期更文。 期待每一天。

  • 简单介绍

    91年生 大专专业是英语教育 本科专业是教育学 2009年下半年认识了现在的老公,2011年毕业后没有按常规考编制...

网友评论

    本文标题:OC-RunLoop简单介绍

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