消息循环NSRunLoop

【多线程-第二天-子线程的消息循环 Objective-C语言】 阅读详情

NSRunLoop (消息循环)
RunLoop就是消息循环,每一个线程内部都有一个消息循环。
只有主线程的消息循环默认开启,子线程的消息循环默认不开启。

NSRunLoop的作用
1,保证程序不退出
2.负责处理输入事件
3.如果没有事件发生.会让程序进入休眠状态

事件源 : input Sources 输入源
Timer Source 定时源

消息循环使用
1.创建输入源(定时源)
2.指定事件源再循环中运行的模式.并加入循环

//创建时间源
  NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(task) userInfo:nil repeats:YES];

  //定时源加到消息循环中去
   [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

循环的模式 (只有当消息模式 与循环的模式 匹配的时候,消息运行)
 // NSDefaultRunLoopMode 默认模式下,拖动界面,计时器停止  最常用的循环模式
 // NSRunLoopCommonModes 多模式的状态,拖动界面,不影响计时器工作 一组模式的集合

 // 消息循环时模式
  // kCFRunLoopDefaultMode 定时器工作的模式(默认模式)
  // UITrackingRunLoopMode 拖动界面时的模式

1.创建消息
2.把消息放入循环,并指定消息运行的模式
3.在与循环的模式匹配的时候,消息运行

特点:子线程默认不开启消息循环,主线程默认开启消息循环。
子线程的 RunLoop默认是不开启的,而且不可以轻易开启,如果开启会形成死循环,然后不停地检测是否有事件发生,因此开启子线程的消息循环之后一定要关闭,防止程序挂掉,

子线程中的消息循环

 //开启子线程的消息循环
  //第一种方法 .无法停止
  //    [[NSRunLoop currentRunLoop] run];
  //第二种方法 .制定循环运行时间,
  [[NSRunLoop currentRunLoop]
      runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
  //第三种方式 推荐方式
  //将shouldKeepRunning定义为全局的变量,并且设置为NO
  //  BOOL shouldKeepRunning = YES; // global
  NSRunLoop *theRL = [NSRunLoop currentRunLoop];
  NSLog(@"%d", shouldKeepRunning);
  while (shouldKeepRunning &&
         [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

NSRunloop与autorelease pool
在主线程消息循环开始的时候创建自动释放池,在消息循环结束的时候,销毁释放池,
在循环过程中创建的临时对象,会自动添加到释放池中,在循环结束后会向池中所有对象发送 release 消息,释放所有 autorelease 对象,以减少内存消耗;
NSThread开启子线程的时候要自己创建自动释放池,否则会发生内存泄露

【Isaac Sim】无头服务器远程桌面连接实战:Turbovnc配置与常见问题解决 本文详细介绍了在无头GPU服务器上通过Turbovnc远程桌面连接并运行NVIDIA Isaac Sim的实战教程。针对无图形界面服务器运行仿真软件的核心痛点,文章提供了从Turbovnc安装配置、SSH隧道建立,到以普通用户身份启动服务、解决GLXBadFBConfig等常见图形错误的完整方案,帮助开发者在云端高效部署机器人仿真环境。 阅读详情

相关推荐

光模块基础知识【快速入门】02

光模块是用于交换机与设备之间传输的载体,是光纤通信系统中的核心器件。主要作用是发射端将设备的电信号转换成光信号。 光纤通道光模块和以太网光模块 光纤通道光模块 光纤通道(FC, Fiber Channel)是一种高速网络数据传输协议。光纤通道协议可以有序无损地传输原始数据,它主要用于在数据中心、电脑服务器、交换机与存储网络中进行数据传输。 FC光模块遵循FC协议,充当着光纤通道系统之间的接口,也是光纤存储网络设备间的接口。它们主要用于数据中心的光纤通道存储网络链接中。 FC光模块具有小型化和低.

Jin Hanquan的博客 3万+

个人对RunLoop的见解

RunLoop–运行环 RunLoop的基本作用 保持程序的持续运行 处理app中的各种事件(比如触摸事件,定时器事件,selector事件) 节省CPU资源,提高程序性能:该做事的时候做事,该休息就休息 main函数中的RunLoop UIApplication函数内部就启动了一个RunLoop 这个Runloop主线程的,默认是开启的,子线程的RunLoop默认是关闭的 每条线程都有唯一

LoSenTrad 1043

紫光同创PGL50H开发板PCIE通信保姆级教程:从IP核安装到Windows设备管理器识别

本文详细介绍了紫光同创PGL50H开发板PCIE通信的全流程,从IP核安装到Windows设备管理器识别。通过环境搭建、工程配置、管脚约束、固件烧录等步骤,帮助开发者快速掌握FPGA与PCIE通信技术,解决实际开发中的常见问题,提升开发效率。

weixin_30500473的博客 434

AUTOSAR的运行流程

以EB产品提供的demo为例,执行完EcuM_StartupTwo后,会初始化各个模块(例如通信协议栈模块,状态管理模块,内存管理模块等),并请求BswM进入到Startup Two A的状态。从EcuM的角度来说,ECU已经是运行状态,然而,接下来还会由BswM模块进行模式仲裁以及更多的BSW模块初始化,启动RTE,开始运行SWC。首先,需要启动BSW调度表,然后初始化BswM模块,初始化BSW调度表,最后开启调度表计时器,开始执行BSW或者SWC的周期事件。

PlutoZuo的博客 2856

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程

qq_48717745的博客 991

Mininet 2.2.1 图形可视化界面使用注意事项

前言 关于mininet的安装,网上教程不少,大致可以参考以下这篇文章: https://blog.youkuaiyun.com/linyixiao88/article/details/65651390 安装的时候,也可以不必根据上面这篇文章这么麻烦,直接sudo apt-get install mininet,即可。 Mininet可视化 Mininet 2.2.0以上版本内置了...

裕东方的博客 4191

使用WNTR生成数据完成LSTM预测时间数据数据集的准备工作

我们在预测用水量、节点压力的数据时,不仅仅只针对原始的时间序列数据,还要考虑特定时间点的特性。 根据专业知识,对用水压力进行预测。 1.用户用水的周期性,由于工作生活的高度规律性,大部分用户是白天上班,用水高峰在早上起床的洗漱、下班回家做饭、晚间洗漱等三个较为固定的时间段。呈现出三个波峰,晚间凌晨低谷的用水曲线。 2.并且还随着温度,区域人口的增长等有一种趋势的叠加状态。 于是,我们按照往日数据进行预测的时候,不能仅仅考虑预测时间点当日的用水因素,还应该考虑在较长的时间段内的用水趋势变化。 在以往的博文中,

wenxiaoshuai001的博客 1557

51单片机独立按键控制LED(二)

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。独立按键控制LED显示二进制。独立按键控制LED灯亮灭。独立按键控制LED状态。独立按键控制LED移位。

m0_50562428的博客 5383

【iOS程序启动与运转】- RunLoop个人小结

作者:楚天舒 授权本站转载。 学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等。其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属性和方法作为接口,是让我们在给定的方法里写代码实现自定义功能,做出各种各样的应用。这些方法的调用顺序最为关键,熟悉了程序运转和方法调用的顺序,才可以更好地操控程序和

qq_16379603的博客 803

使用Python实现卷积神经网络(CNN)

卷积神经网络是一种专门用于处理具有网格状拓扑结构数据(如图像、声音)的深度学习模型。CNN的核心组件是卷积层和池化层,它们能够有效地从图像中提取特征并实现空间不变性,使得模型能够对图像中的物体进行识别和分类。我们定义一个简单的卷积神经网络模型,包括卷积层、池化层和全连接层。return x# 创建模型实例我们选择交叉熵损失函数作为分类任务的损失函数,并使用随机梯度下降(SGD)作为优化器。

Echo_Wish 4489

使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析

双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。

amy_mhd的博客 8507

Oracle/PLSQL FOR Loop

Oracle/PLSQL FOR Loop

fdyufgf的博客 1088

手把手教你学simulink(16.8)--基于Simulink的小波变换滤波器(Wavelet Transform Filter)项目

基于Simulink的小波变换滤波器(Wavelet Transform Filter)项目的详细实例介绍。这个项目将重点放在小波变换滤波器的设计、实现和仿真上,帮助你理解和应用小波变换滤波器在信号处理中的作用。

MHD0815的博客 534

NSRunLoop消息循环

自动释放池 当主线程的消息循环开始的时候会先创建自动释放池 消息循环结束前,会释放自动释放池 NSRunLoop消息循环 每一个线程内部都有一个消息循环 只有主线程的消息循环默认开启,子线程的消息循环默认不开启 子线程的消息循环开启:[[NSRunLoop currentRunLoop]run] 需注意,对于线程而言,开启后的线程永不销毁,使用结束会保存到线程缓存池中

DrankMouse 419

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NSRunLoop( 消息循环 )

1. 什么是RunLoop? 就是消息循环,每个线程内部都有一个消息循环; 主线程默认开启消息循环, 子线程默认不开启; 2. RunLoop的目的? 保证程序不会退出; 负责处理事件; 如果没有事件发生, 会让程序进入到休眠模式;

iOS_ZJQ的博客 587

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NSRunLoop 对象

(摘自《苹果开发之cocoa编程》原话) “NSRunLoop对象专司等待。它等到事件抵达,然后把事件中转给NSApplication;它等待timer事件,然后把事件中转给NSTimer。 甚至可以附加一个网络socket到循环中,然后它就会等待那个socket上数据的抵达。”  说白了就是消息循环么,消息中转站。

活着就为改变世界 1544

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NSRunloop,runloop,autoReleasePool和thread的关系理解

NSRunloop NSRunloop顾名思义,就是一个消息循环,它会侦测输入源(input source)和定时源(timer source),然后做回调处理。这和windows的消息处理非常类似,只不过你无法看到类似SendMessage,PostMessage,GetMessage的方法,NSRunloop已经封装了这些细节。那NSRunloop的好处是不是只有封装细节,然后方便调用呢?答

zyy的专栏 5300

ios超精细详解之NSRunLoop

我们首先来了解一下什么是NSRunLoop 1.NSRunLoop是IOS消息机制的处理模式 NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。 2.NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击

wangyongiii的博客 436

NSRunLoop 概述和原理

1.什么是NSRunLoop? 我们会经常看到这样的代码: - (IBAction)start:(id)sender { pageStillLoading = YES; [NSThread detachNewThreadSelector:@selector(loadPageInBackground:)toTarget:self withObject:nil]; [progress

zerocnd的专栏 1257

NSRunLoop方法使用及使用场景

+ (NSRunLoop *)currentRunLoop; //获得当前线程的run loop+ (NSRunLoop *)mainRunLoop; //获得主线程的run loop- (void)run; //进入处理事件循环,如果没有事件则立刻返回。注意:主线程上调用这个方法会导致无法返回(进入无限循环,虽然不会阻塞主线程),因为主线程一般总是会有事件处理。- (void)runUntilD...

zhouleizhao的专栏 4618

iOS NSRunLoop

NSRunLoop就是一个事件处理循环,用来不停的监听和处理输入事件并将其分配到对应的目标上进行处理。 首先,NSRunLoop是一种更加高明的消息处理模式,他就高明在对消息处理过程进行了更好的抽象和封装,这样才能是的你不用处理一些很琐碎很低层次的具体消息的处理,在NSRunLoop中每一个消息就被打包在input source或者是timer source中。它还可以处理使线程阻塞的工作。

IosScholar 586

iOS巅峰之NSRunLoop

我们首先来了解一下什么是NSRunLoop 1.NSRunLoop是IOS消息机制的处理模式 NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。 2.NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击

qw656567的博客 373

NSRunloop 简单细说

NSRunloop简单细说(一)—— 整体了解NSRunloop简单细说(二)—— 获取运行循环及其模式NSRunloop简单细说(三)—— 定时器和端口NSRunloop简单细说(四)—— 开启RunloopNSRunloop简单细说(五)—— 调度和取消消息NSRunloop简单细说(六)—— 几种循环模...

weixin_33811961的博客 101

NSRunLoop的进一步理解

NSRunLoop的进一步理解 2011-8-22 15:42| 发布者: Vincent| 查看: 716| 评论: 17|原作者: iGoogle 摘要: 本文基于一篇网络文章,加入了一些自己的理解,希望对大家有所帮助 iPhone应用开发中关于N

huangbaoyu1840的专栏 1176
上一篇: 沙盒文件存储
下一篇: Block的循环引用
Step_Next
博客等级 码龄11年 0粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值