NSRunLoop( 消息循环 )

【多线程-第二天-子线程的消息循环 Objective-C语言】 阅读详情
1. 什么是RunLoop?
  • 就是消息循环,每个线程内部都有一个消息循环;
  • 主线程默认开启消息循环, 子线程默认不开启;

2. RunLoop的目的?
  • 保证程序不会退出;
  • 负责处理事件;
  • 如果没有事件发生, 会让程序进入到休眠模式;

3. 事件类型( 输入源, 定时源 )


4.事件的使用( NSTimer )

      4.1创建 NSTimer 

  
     

     输出当前循环的模式     
      
          没有拖动界面  — —  kCFRunLoopDefaultMode
          拖动界面 — — UITrackingRunLoopMode  
    
      4.2 循环常用模式
  • NSDefaultRunLoopMode 默认模式
                                   -------拖动界面,, 定时源不懂
  • NSRunLoopCommonModes 普通模式
                                           --------拖动界面,定时源不受影响

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

6. 子线程的消息循环

         1. 创建线程

         2. 往线程的消息循环中加入源
      3. 开启循环 ( 三种方法 )

  •   [[NSRunLoop currentRunLoop] run]; ——— 无法停止消息循环停止 

  • [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; ——— 指定循环运行时间

  • BOOL shouldKeepRunning = YES;        // global —— 要声明全局变量
       
    NSRunLoop *theRL = [NSRunLoop currentRunLoop];
       
    while (shouldKeepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);  ———  苹果推荐使用
告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比) 本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。 阅读详情

相关推荐

opencv 常用函数总结

本文是一份OpenCV图像处理的常用函数总结,详细介绍了图像的读入、显示、保存、像素处理、图像属性获取、基础操作、阈值处理、图像平滑、形态学转换以及直方图处理等关键技术。文章通过代码示例和参数说明,帮助读者快速掌握OpenCV在图像处理领域的应用。

weixin_44063529的博客 1600

NSRunLoop方法使用及使用场景

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

zhouleizhao的专栏 4618

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8911

Runloop应用详解

RunLoop 是 iOS 应用于线程中的一种循环机制。系统本身没有创建 RunLoop 的 API,不过可以通过 currentRunLoop 获取当前 RunLoop。主线程本身就存在一个 RunLoop,而且是运行转态,子线程的 RunLoop 需要手动开启,否知无法监听到输入源与定时源。子线程 RunLoop 随着所在子线程的事件源结束而关闭,随着所在子线程的结束而释放。

风·之痕的博客 1511

win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)

本来没有打算写这一篇解决帖子的,但是最近好多微博的友友都在私我询问解决方法,孩子虽然很热心,但是真的回复不过来了,打字太累了,这里给大家简单指个路,希望能够对大家有所帮助。 当时出现这个问题的时候,一搜网上的解决方法都是重装系统什么的,真是吓死孩子啦。后来去微软的官网倒腾了半天解决了问题。其实只要你没有改过微软账户,你可以直接试试我这个方法,大概三到五分钟解决问题吧。 和我情况不一样的也可以参考一下贴吧里一些大佬的分享,或者实在着急我感觉去淘宝上找个解决也不是未尝不可。 出现问题: 解决方案: 直接去微软

zhiqingxue的博客 2万+

从零理解域随机化:通过Isaac Lab的events.py掌握Sim-to-Real关键技术

本文深入解析域随机化技术如何通过Isaac Lab的events.py实现Sim-to-Real迁移,提升机器人策略在真实世界的鲁棒性。从刚体属性到环境条件的系统级随机化,详细介绍了工程实践中的关键参数配置与调试技巧,帮助开发者有效缩小仿真与现实的差距。

weixin_29062613的博客 260

iOS RunLoop 初识

今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢。当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运行的。时间到了,消息发出后,ontimer的函数是在主线程上调用的。 我们会经常看到这样的代码: - (IBAction)start:(id)sender   {   pageStil...

weixin_34143774的博客 156

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 322

主线程是如何切换runloop的探究

对RunLoop运行机制不熟悉的可以先看我的这篇文章:深入理解RunLoop 我们都知道,iOS的tableView能做到滑动很平滑,一部分是依赖于runloop的mode的切换。当系统检测到有scrollerview滑动时,系统就会将当前进程的主线程切换到UITrackingRunLoopMode,直到滑动结束,又会切换到NSDefaultRunLoopMode。这个过程听起来很奇妙,那么他是怎么做到的呢,我们能不能在需要的时候也这么做呢? 答案是肯定的,我们可以模拟这个过程,我的思路是这样的:由于主

小马哥好棒哦 2430

固定翼飞行器建模(一)——六自由度动力学

前两期文章讲完了气动力和气动力矩的模型,本期将来讲解一下六自由度部分的动力学与运动学方程。

2302_80148937的博客 1万+

ComfyUI 局部重绘工作流示例

本文介绍了使用ComfyUI进行图像局部重绘的基础工作流程,重点讲解如何修改人物眼睛颜色和表情。主要内容包括:1.准备工作(可选下载DreamShaperv8模型);2.加载素材图片和工作流文件;3.使用遮罩编辑器绘制需要修改的区域;4.修改提示词控制生成内容;5.调整denoise参数优化效果。教程提供了详细的提示词示例(如"smile,blackeyes"等)和参数设置建议,帮助用户通过多次尝试获得理想效果。该工作流适用于修改图像局部区域而不影响整体画面。

云域A的博客 333

iOS runLoop 用法详解3

// // ViewController.m // test_runLoop_01 // // Created by jeffasd on 16/7/25. // Copyright © 2016年 jeffasd. All rights reserved. // #import "ViewController.h" @interface ViewController () {

jeffasd的专栏 726

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NSRunLoop消息循环

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

DrankMouse 419

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

消息循环NSRunLoop

NSRunLoop (消息循环) RunLoop就是消息循环,每一个线程内部都有一个消息循环。 只有主线程的消息循环默认开启,子线程的消息循环默认不开启。NSRunLoop的作用 1,保证程序不退出 2.负责处理输入事件 3.如果没有事件发生.会让程序进入休眠状态事件源 : input Sources 输入源 Timer Source 定时源消息循环使用 1.创建输入

Step_Next的博客 781

NSRunLoop 对象

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

活着就为改变世界 1544

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

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

NSRunloop 的用法

今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢。当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运行的。时间到了,消息发出后,ontimer的函数是在主线程上调用的。 我们会经常看到这样的代码: - (IBAction)start:(id)sender  {

Gabriel的专栏 1852
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值