iOS runloop理解
来源:互联网 发布:怎样联系网络推手 编辑:程序博客网 时间:2024/05/29 06:49
1.iOS中有2套API来访问和使用RunLoop
A)Foundation
NSRunLoop
B)CoreFoundation
CFRunLoopRef
NSRunLoop和CFRunLoopRef都代表着RunLoop对象
NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(CoreFoundation层面)
2.可以查看的资料
10.自动释放池什么时候释放?
通过observer监听runloop的状态,一旦监听到Runloop即将进入睡眠状态,就释放自动释放池(kCFRunloopBeforeWaiting)
11什么是runloop?
runloop只能选择一个Mode执行,如果当前的runloop没有任何的Source(Source0,Source1),timer,那就直接退出runloop。
12.释放池主要关注runloop的三个mode
kCFRunloopEntry 创建自动释放池
kCFRunloopWaiting 销毁自动释放池,创建一个新的自动释放池
kCFRunloopExit 销毁自动释放池。(160)
主要看Activities的值, 160 = kCFRunloopWaiting(32)+kCFRunloopExit(128)
2.可以查看的资料
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html
http://opensource.apple.com/source/CF/CF-1151.16/
3.Runloop 与线程的关系每条线程都有唯一的一个与之对应的RunLoop对象
主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
RunLoop在第一次获取时创建,在线程结束时销毁
4.获得Runloop对象 Foundation
[NSRunLoopcurrentRunLoop];//获得当前线程的RunLoop对象
[NSRunLoopmainRunLoop];//获得主线程的RunLoop对象
CoreFoundation
CFRunLoopGetCurrent();//获得当前线程的RunLoop对象
CFRunLoopGetMain();//获得主线程的RunLoop对
5.
lCoreFoundation中关于RunLoop的5个类
CFRunLoopRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef
CFRunLoopObserverRef
6.CFRunLoopModeRef
7.CFRunLoopModeRef6.CFRunLoopModeRef
CFRunLoopModeRef代表RunLoop的运行模式
一个 RunLoop包含若干个Mode,每个Mode又包含若干个Source/Timer/Observer
每次RunLoop启动时,只能指定其中一个Mode,这个Mode被称作CurrentMode
如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入
这样做主要是为了分隔开不同组的Source/Timer/Observer,让其互不影响
l系统默认注册了5个Mode:
kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode影响
UIInitializationRunLoopMode:在刚启动App时第进入的第一个Mode,启动完成后就不再使用
GSEventReceiveRunLoopMode:接受系统事件的内部Mode,通常用不到
kCFRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode
8.
9.应用8.
NSTimer
ImageView显示
PerformSelector
常驻线程
自动释放池
10.自动释放池什么时候释放?
通过observer监听runloop的状态,一旦监听到Runloop即将进入睡眠状态,就释放自动释放池(kCFRunloopBeforeWaiting)
11什么是runloop?
runloop只能选择一个Mode执行,如果当前的runloop没有任何的Source(Source0,Source1),timer,那就直接退出runloop。
12.释放池主要关注runloop的三个mode
kCFRunloopEntry 创建自动释放池
kCFRunloopWaiting 销毁自动释放池,创建一个新的自动释放池
kCFRunloopExit 销毁自动释放池。(160)
主要看Activities的值, 160 = kCFRunloopWaiting(32)+kCFRunloopExit(128)
0 0
- iOS 深入理解RunLoop
- iOS runloop理解
- iOS - RunLoop 深入理解
- iOS开发:深入理解RunLoop
- 深入理解IOS的RunLoop
- iOS RunLoop 自己的理解
- iOS RunLoop 的个人理解
- iOS开发系列--深入理解RunLoop
- 深入理解iOS开发之RunLoop
- iOS学习之RunLoop的深入理解
- 关于IOS 我对Runloop 的理解
- Runloop 理解
- Runloop 理解
- runLoop理解
- runloop理解
- iOS runloop
- iOS runloop
- iOS RunLoop
- java -version的输出内容分析
- PyGobject(一百零七)CSS系列——动画背景
- HDU 1562 Guess the number
- chromium修改Tab 页
- RICOH THETA×IoT Developers Contest
- iOS runloop理解
- Cornerstone无法上传 .so 文件的问题
- POJ-1300 Door Man
- AndroidStudio快捷键设置
- thinkphp的dump函数无输出
- 买饮料难题
- 几种触发点击事件的方法
- 本月有几天
- JDBC个人笔记