NSRunLoop消息循环
来源:互联网 发布:亮化动画设计软件 编辑:程序博客网 时间:2024/06/06 20:36
自动释放池
当主线程的消息循环开始的时候会先创建自动释放池
消息循环结束前,会释放自动释放池
NSRunLoop消息循环
每一个线程内部都有一个消息循环
只有主线程的消息循环默认开启,子线程的消息循环默认不开启
子线程的消息循环开启:[[NSRunLoop currentRunLoop]run]
需注意,对于线程而言,开启后的线程永不销毁,使用结束会保存到线程缓存池中,当需要让子线程执行新的方法,使用performSelector让指定的方法在指定的子线程上运行
目的:
保证程序不退出
负责处理输入时间
如果没有事件发生,会让程序进入休眠状态
使用消息循环必须指定两件事情:输入事件与消息循环模式
输入事件有两种:输入源与定时源
消息循环模式大致常用有两种:NSDefaultRunLoopMode、NSRunLoopCommonModes
消息循环运行在某一种消息循环模式上
如果想让输入事件可以在消息循环上执行,输入事件的消息循环模式必须和当前消息循环的消息循环模式一致
NSRunLoop在处理输入事件时会产生通知,可以通过CoreFoundation向线程中添加run-loop observers来监听特定事件,以在监听的事件发生时做附加的处理工作
NSRunLoopCommonModes是一个集合,其中包含其监听的若干输入事件源,定时器,以及在事件发生时需要通知的runLoopObserver,运行在一种Model下的runLoop只会处理其mode中包含的输入事件,定时器事件,以及通知runLoopMode中包含的observers
NSDefaultRunLoopMode默认模式,几乎包含了所有输入源(NSConnection除外),一般情况下使用此模式
NSTimer与NSURLConnection默认运行在defaultMode下,这样当用户在拖动界面时,NSTimer不能运行,NSURLConnection的数据也无法处理。因为当拖动界面时,当前线程的runLoop处于UIEventTrackingRunLoopMode模式,在这种模式下,不处理定时事件。即定时事件无法运行,所以NSTimer与NSRURLConnection都不能执行。
解决方法:可把Timer加入到NSOperation中在另一个线程中调用,或把Timer的runLoop模式改为UITrackingRunLoopMode模式或NSRUNLoopCommonModes模式中
- NSRunLoop( 消息循环 )
- 消息循环NSRunLoop
- NSRunLoop消息循环
- NSRunLoop(运行循环)
- 186,NSRunLoop运行循环
- iOS 【Mutithreading-NSRunLoop 运行循环】
- NSRunLoop 运行循环的粗浅理解;
- NSRunLoop是消息机制的处理模式
- iOS开发消息篇—NSRunLoop
- NSRunLoop
- nsrunloop
- NSRunloop
- nsrunloop
- NSRunLoop
- NSRunloop
- NSRunLoop
- NSRunLoop
- NSRunLoop
- HDU 5688 统计
- SQL的简单应用
- MD5、钥匙串与Base64
- 勾股定理一日一证连载7
- CSS基础二:CSS模型
- NSRunLoop消息循环
- 【Linux开发】linux中关于dma_alloc_coherent的用法
- Set up Docker/Debian/VirtualBox/Win7
- 断点缓存
- CF 660B 排座位
- [疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析
- Nmap详解
- 小画板
- Install OpenCV-3.1.0 fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope)