NSRunLoop详解

NCRE二级C语言上机考试:VC++6.0环境实战训练与题型突破指南 C语言作为编程入门与计算机等级考试的核心科目,其学习重点在于将语法知识转化为解决实际问题的编程能力。理解程序从源代码到可执行文件的编译、链接原理,是掌握任何编程语言的基础。对于备考全国计算机等级考试(NCRE)的考生而言,上机实践是检验学习成果和应试能力的关键。在工程实践中,集成开发环境(IDE)和调试工具的使用能力,与算法逻辑本身同等重要。本文聚焦于NCRE二级C语言上机考试的官方指定环境——VC++6.0,深入解析如何利用高度仿真的【上机实战训练软件】进行高效备考。该软件集成了题库管理、模拟评分和集成开 阅读详情
1.NSRunLoop是IOS消息机制的处理模式

NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。

2.NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)同步事件,检测timesource同步事件,检测到输入源会执行处理函数,首先会产生通知,corefunction向线程添加runloop observers来监听事件,意在监听事件发生时来做处理。 3.runloopmode是一个集合,包括监听:事件源,定时器,以及需通知的runloop observers 模式包括:

default模式:几乎包括所有输入源(除NSConnection) NSDefaultRunLoopMode模式  mode模式:处理modal panels

connection模式:处理NSConnection事件,属于系统内部,用户基本不用

event tracking模式:如组件拖动输入源 UITrackingRunLoopModes 不处理定时事件  

common modes模式:NSRunLoopCommonModes 这是一组可配置的通用模式。将input sources与该模式关联则同时也将input sources与该组中的其它模式进行了关联。  

每次运行一个run loop,你指定(显式或隐式)run loop的运行模式。当相应的模式传递给run loop时,只有与该模式对应的 input sources才被监控并允许run loop对事件进行处理(与此类似,也只有与该模式对应的observers才会被通知)

5.NSTimer默认添加到当前NSRunLoop中,也可以手动制定添加到自己新建的NSRunLoop的中

[NSTimer schduledTimerWithTimeInterval: target:selector:userInfo:repeats]; 此方法默认添加到当前NSRunLoop中

NSTimer *timer = [NSTimer timerWithTimeInterval: invocation:repeates:]; NSTimer *timer = [[NSTimer alloc] initWithFireDate:...];

创建timer  [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];  注意 timer的释放    

例:

1). 在timer与table同时执行情况,当拖动table时,runloop进入UITrackingRunLoopModes模式下,不会处理定时事件,此时timer不能处理,所以此时将timer加入到NSRunLoopCommonModes模式(addTimer forMode)

2).在滚动一个页面时来松开,此时connection不会收到消息,由于scroll时runloop为UITrackingRunLoopModes模式,不接收输入源,此时要修改connection的mode [scheduleInRunLoop:[NSRunLoop currentRunLoop]forMode:NSRunLoopCommonModes]; 6、子线程中的NSRunLoop需要手动启动,在子线程中使用timer要启动NSRunLoop。 7、关于-(BOOL)runMode:(NSString *)mode beforeDate:(NSDate *)date;方法 指定runloop模式来处理输入源,首个输入源或date结束退出。

暂停当前处理的流程,转而处理其他输入源,当date设置为[NSDate distantFuture](将来,基本不会到达的时间),所以除非处理其他输入源结束,否则永不退出处理暂停的当前处理的流程。 8.while(A){

 [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];  }

当前A为YES时,当前runloop会一直接收处理其他输入源,当前流程不继续处理,出为A为NO,当前流程继续

9 、perform selector在thread中被序列化执行,这样就缓和了许多在同一个thread中运行多个方法所产生的同步问题。perform selector source在运行完selector后自动从run loop中移除。 当在非main thread中perform selector时,其thread中必须有一个激活的run loop。对于你自己创建的thread而言,只有你的代码显式的运行一个run loop后该perform selector才能得到执行。Run loop在当loop运行时处理所有已排队的perform selector,而不是在一个loop循环时只处理某一个perform selector。  

10.performSelector 关于内存管理的执行原理是这样的执

行 [self performSelector:@selector(method1:) withObject:self.tableLayer afterDelay:3]; 的时候,系统会将tableLayer的引用计数加1,执行完这个方法时,还会将tableLayer的引用计数减1,由于延迟这时tableLayer的引用计数没有减少到0,也就导致了切换场景dealloc方法没有被调用,出现了内存泄露。 利用如下函数:

[NSObject cancelPreviousPerformRequestsWithTarget:self] 当然你也可以一个一个得这样用:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(method1:) object:nil]



加上了这个以后,顺利地执行了dealloc方法  

在touchBegan里面

[self performSelector:@selector(longPressMethod:) withObject:nil afterDelay:longPressTime] 然后在end 或cancel里做判断,如果时间不够长按的时间调用:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(longPressMethod:) object:nil]

取消began里的方法  

**********************************以下是我在cocoachina中看到的一份总结 转载过来 线程实现的几种方式:

1. Operation Objects   // NSOperation及相关子类

2. *****                           // dispatch_async等相关函数

3. Idle-time notifications  //  NSNotificationQueue,低优先级 3. Asynchronous functions  // 异步函数 4. Timers                      // NSTimer 5. Separate processes  // 没用过  

线程创建的成本:

kernel data structures  约1KB

Stack space             512KB(secondary threads)                                     1MB(iOS main thread) Creation time           约90 microseconds  

Run Loop和线程的关系:

1. 主线程的run loop默认是启动的,用于接收各种输入sources

2. 对第二线程来说,run loop默认是没有启动的,如果你需要更多的线程交互则可以手动配置和启动,如果线程执行一个长时间已确定的任务则不需要。  

Run Loop什么情况下使用:

a. 使用ports 或 input sources 和其他线程通信   // 不了解

b. 在线程中使用timers                                             // 如果不启动run loop,timer的事件是不会响应的  

c. 在Cocoa 应用中使用performSelector...方法   // 应该是performSelector...这种方法会启动一个线程并启动run loop吧

d. 让线程执行一个周期性的任务                            // 如果不启动run loop, 线程跑完就可能被系统释放了  

注:timer的创建和释放必须在同一线程中。

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];  此方法会retain timer对象的引用计数






chromium通信系统-ipcz系统(二)-ipcz系统代码实现-同Node通信 在chromium通信系统-mojo系统(一)-ipcz系统基本概念一文中我们介绍了ipcz的基本概念。 本章我们来通过代码分析它的实现。 handle系统 为了不对上层api暴露太多细节,实现解耦,也方便于传输,ipcz系统使用handle表示一个对象,handle类似于文件描述符,用IpczHandle类型表示ipcz系统内的一个对象。一个可以用IpczHandle 句柄表示的对象必须是APIObject子类。APIObject数据结构如下 class APIObject : public RefCou 阅读详情

相关推荐

CDH Hue连接Hbase报错TSocket read 0 bytes

问题描述 安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下: Api 错误:TSocket read 0 bytes Hue日志报错: exceptions_renderable ERROR Potential trace: [('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self

邢为栋 3491

Runloop 的五种mode

模式类似于跑道,一个runloop同时只能在一个跑道上进行,并且模式有优先级, UITrackingRunLoopMode是UI模式,是优先级最高的模式,当runloop遇到事件的时候,会根据事件指定的模式,去切换跑到,UITrackingRunLoopMode的优先级最高,所以就切换到了这个模式上,这时候其他模式下的事件就不会被执行.场景: 当一个页面中添加了UIScrollView 同时还有一个定时器的时候,当UIScrollView 滑动的时候, 定时器是不工作的,

KLong27的博客 1646

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 348

NSTimer与Run loop Modes

NSTimer与Run loop Modes Posted on June 29, 2012 by xuguoxing 转自http://www.winddisk.com/2012/06/29/nstimer_run_loop_modes/ 一.NSRunLoop 在Cocoa中,每个线程(NSThread)对象中内部都有一个run loop(NSRunLoop

专注移动互联网 1501

IEC 62061 总结与适用范围

IEC 62061 是国际电工委员会(IEC)制定的。

cactusDaYe的博客 1081

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 388

NSRunLoop_mode_timer

1.NSRunLoop  相似于do()while{}  保证应用程序不被关闭 ios 中runLopp 两种方式  1: NSRunLoop (oc)   2:CFRunLoop (c语言) NSRunLoop  五种模式 1:KCFRunLoopDefaultMode     默认mode  主线程是在该mode下运行的 2:UITrackingRunLoopMode       界

kuangzihui1989的博客 434

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7828

NSRunLoop底层原理详解

原文博客地址: NSRunLoop底层原理详解 正常情况下, 一个线程执行完, 程序就会立即退出, 比如一个命令行项目 NSRunLoop是iOS中的消息处理机制,执行完某个事件后线程不会退出,而是进入休眠状态,当再次监测到需要出发事件时,线程激活,继续处理事件,处理完成后再次进入休眠 这种时间运行循环, 类似于一个while循环 默认情况下, 不需要我们手动创建RunLoop, 因为coco...

RunningKing 787

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

YOLO26 电子产品零部件质检:缺陷检测 + Streamlit

YOLO26s 电子质检链路:1100 张工业零部件图 (4 类缺陷) → 增强 (blur+shear+低光照) → 150 epoch → mAP@0.5=0.91 → Streamlit 质检界面 (上传/摄像头双模式) → 缺陷严重度分级 (pass/minor/major/critical)。核心贡献:blur+shear 模拟产线振动和视角偏移, 使模糊场景 recall 从 72% 提升至 78%;Streamlit 一键部署, 无需前端经验。建议先收集 200 张纯正常件做负样本防过检;

m0_71589036的博客 374

NSRunLoop

NSRunLoop --NSRunLoop是IOS消息机制的处理模式 ,控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。  如果说整个工厂是一条进程,里面的线程是生产线,那么runloop就是守着这些生产线的工人,在生产线不做的情况下进行暂停休眠,使线程不会被释放掉,而且在runlo

AlenCzf的博客 555

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 326

NSRunLoop的使用

1.NSRunLoop是消息机制的处理模式 NSRunLoop的作用在于有事情做的时候使的当前NSRunLoop的线程工作,没有事情做让当前NSRunLoop的线程休眠 2.nstimer默认添加到当前NSRunLoop中,也可以手动制定添加到自己新建的NSRunLoop的中 [NSTimer schduledTimerWithTimeInterval:

lw65112的专栏 685

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NSRunloop详解

转载自http://jiangxingfei1590.blog.163.com/blog/static/1816561952012522115513440/ Phone应用开发中关于NSRunLoop的概述是本文要介绍的内容,NSRunLoop是一种更加高明的消息处理模式,他就高明在对消息处理过程进行了更好的抽象和封装,这样才能是的你不用处理一些很琐碎很低层次的具体消息的处理,在

clwahaha的专栏 717

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NSRunloop简介

NSRunLoop是IOS消息机制的处理模式 NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。 NSRunLoop 就是一直在循环检测,从线程start到线程end,检测inputsource(如点击,双击等操作)同步事件,检测timesource...

depaoweng2915的博客 129

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【iOS】NSRunLoop

RunLoop是iOS中实现线程常驻的核心机制,它通过事件循环管理线程任务。RunLoop与线程一一对应,通过全局字典存储关系。RunLoop包含多个Mode,每个Mode管理Source、Timer和Observer三类事件源。Source0处理应用内事件,需手动唤醒;Source1基于端口自动唤醒线程。Timer是时间触发器,Observer用于监听RunLoop状态。常见应用场景包括:优化TableView图片加载、解决滑动时Timer失效问题、AFNetworking的常驻线程等......

2301_80095702的博客 882

NSRunLoop是什么

NSRunLoop其实它比较像Android的Looper每个线程中都有自己的Looper,只是主线程及UI不用自己创建系统已经帮我们创建好了。 而 NSRunLoop 就是它寄宿线程的 监督者 ,负责24小时监督它的 宿主 线程的一举一动。 一.作用 1.程序运行一直接受用户输入 2.决定何时处理何种Event 3.MessageQueue 二.组成

watertekhqx的博客 453

iOS-NSRunLoop编程详解

-------------------------iOS-NSRunLoop编程详解1--------------------------------- 一.简介 NSRunloop在编程中扮演的是一个管理者角色,它管理的对象是输入源,NSRunloop处理的对象包括鼠标和键盘的系统事件,此外还有NSPort,NSTimer,NSConnection类的对象。在应用程序中你不能显示的调

980404514_凡凡的专栏 1226

NSRunLoop && NSTimer

新的一年的开始,希望大家一切越来越好,越来越开心快乐!!! 定时器及运行循环 NSRunLoop是iOS消息机制的处理模式 NSRunLoop的主要作用:控制NSRunLoop里面线程的执行和休眠,在有事情做的时候使当前NSRunLoop控制的线程工作,没有事情做让当前NSRunLoop的控制的线程休眠。 通过所有的“消息”都被添加到了NSRunLoop中去,而在这里这些消...

aoyuanzhe2273的博客 201
上一篇: viewDidUnload
下一篇: 反射机制
喵星人Xcode
博客等级 码龄11年 235粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值