参考文章

  • https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW23
  • http://blog.ibireme.com/2015/05/18/runloop/
  • http://www.cnblogs.com/zy1987/p/4582466.html

作用

  • 通过 RunLoop 机制实现省电,流畅,响应速度快,用户体验好
  • 事件循环伪代码
function loop() {initialize();do {var message = get_next_message();process_message(message);} while (message != quit); } 

特性

  • iOS 中所有的事件监听全部由运行循环负责
  • 主线程的 RunLoop 在应用启动的时候就会自动创建
  • 其他线程则需要在该线程下自己启动
  • 不能自己创建 RunLoop
  • RunLoop 并不是线程安全的,所以需要避免在其他线程上调用当前线程的 RunLoop
  • RunLoop 负责管理 autorelease pools
  • RunLoop 负责处理消息事件,即输入源事件、计时器事件和网络请求事情

应用场景

  • 创建常驻线程,执行一些会一直存在的任务。该线程的生命周期跟 App 相同
@autoreleasepool {NSLog(@"%@", [NSThread currentThread]);NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; // 只有添加端口后,才能能够保证运行循环持续运行 [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; [runLoop run]; // 线程结束之前,不会执行至此 NSLog(@"%@", [NSThread currentThread]); } 
  • 维护线程的生命周期,让线程不自动退出,isFinished 为 Yes 时退出
  • 在一定时间内监听某种事件,或执行某种任务的线程

转载于:https://www.cnblogs.com/chzheng/p/5949339.html

Runloop - 运行循环相关推荐

  1. iOS - OC RunLoop 运行循环/消息循环

    1.RunLoop 1)运行循环: 运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要. 同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结 ...

  2. 运行循环(Run Loops)

    运行循环是与线程相关的基础工具的一部分.运行循环是一个用来安排工作并协调传入事件接收的一个事件处理循环.运行循环的目的是当需要工作的时候,让你的线程处于忙碌状态:当没有工作时,让你的线程处于睡眠状态. ...

  3. 主运行循环main run loop的一些理解

    应用主运行循环负责处理所有用户相关的事件.UIApplication对象在应用启动时安装主运行循环并且使用此循环去处理事件和处理基于视图的界面更新.正如名字所表明的,该主运行循环是在应用的主线程app ...

  4. 使用nohup运行循环脚本插入发现数据重复的问题

    在使用nohup进行循环插入的过程中,如果发现在即插入的数据不对想要重新执行的时候,仅仅kill掉nohup进程是不行的,还需要通过 v$session,v$process,v$sql查询到其发出的S ...

  5. OC Autorelease

    @implementation ViewController - (void)viewDidLoad {[super viewDidLoad];__unsafe_unretained NSObject ...

  6. CADisplayLink前世今生

    本文字数:19803字 预计阅读时间:50分钟 用最通俗的语言,描述最难懂的技术 前情描述 上周同事做code review的时候说到了CADisplayLink的一些变化,感触颇深,提到了接口的一些 ...

  7. 常见问题:内存,循环引用,runloop的简单理解

    1常见的出现内存循环引用的场景有哪些? • 定时器(NSTimer): NSTimer经常会被作为某个类的成员变量,而NSTimer初始化时要指定self为target,容易造成循环引用(self-& ...

  8. Runloop循环机制

    2019独角兽企业重金招聘Python工程师标准>>> 今天看了下前天发的博文<函数响应式编程(FRP)框架--ReactiveCocoa>的阅读量,小编有点惊呆了,两天 ...

  9. flask运行多个服务器,与Flask服务器同时运行while循环

    小编典典 使用多进程在Flask HTTP请求的不同进程中运行循环: import time from flask import Flask, jsonify from multiprocessing ...

最新文章

  1. console线驱动安装_centos7安装docker
  2. python django 表单_Django-表单处理
  3. c++产生死锁的必要条件?已经如何预防死锁?
  4. WeChat小程序报错Module not found: Can‘t resolve ‘umtrack-alipay‘ in
  5. 分布式文件系统HDFS,大数据存储实战(一)
  6. 五分钟带你摸透 Vue组件及组件通讯
  7. 在WORD中插入带圈的数字的序号
  8. Java Web项目的保存和刷新
  9. 【人工智能中“预测”的知识点】
  10. 【HDOJ】1720 A+B coming
  11. MAC安装MySQL的正确姿势
  12. Directx11教程(54) 简单的基于GS的billboard实现
  13. Kettle组件Spoon的使用
  14. 淘宝客系统教学系列_2.应用登录接口对接
  15. text edit model FELIX的理解与python实现
  16. python用cartopy包画地图_python – 使用Cartopy在地图上显示图像时的投影问题
  17. vue2路由手动创建二级路由路由传参路由守卫打包上线
  18. emc4012光纤直连服务器,Dell EMC PowerVault ME4012存储
  19. js验证营业执照号码是否合规
  20. java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...

热门文章

  1. 详解centos7使用无线wifi连接的方法
  2. linux ls mv,Linux基本命令总结一(ls,cp,rm,mv,mkdir,rmdir,cd)
  3. mysql55w.x86 64 卸载_Cent6.5 64位yum安装mysql5.5
  4. java list 不包含_java判断list是否包含某个值
  5. java 1.8 rpm_jdk1.8下载 Java Development Kit 8(jdk1.8) 8u131 linux 1586 rpm 官方正式版 下载-脚本之家...
  6. cesium雷达图_20个简化开发任务的 JavaScript库
  7. python正则表达式模块_Python正则表达式函数模块
  8. anguarjs 图片预览_Text to Image Converter(文字转图片软件)下载-Text to Image Converter(文字转图片软件)v1.5绿色版下载...
  9. 至暗时刻鸿蒙初开,鸿蒙2.0面世,华为在“至暗时刻”迎来曙光
  10. 掘金翻译计划,翻译掘金上优质的英文文章