RunLoop

1,Core Foundation框架中。基本作用:保持程序的持续运行,处理app的各种事件,节省cpu资源,提高程序性能
2.RunLoop:每个线程都会有一个唯一的RunLoop对象,主线程的系统自动创建(当访问其他线程的RunLoop,就会自动创建mainRunLoop),子线程的需要手动创建,[NSrunLoop currentRunLoop]; 要启动的话要调用run。。在run之前,RunLoop中的mode必须有port Source,timer,observer其中一个,要不然刚启动就会死(若mode为空, ,再退出)
2.1加入timer时,使用[NStimer scheduledTimer...]它时,默认就会将timer加入RunLoop,[NStimer timerWithTime…]则需手动加入,俩个都一样,需要手动启动RunLoop
3.每次RunLoop启动时,只能指定其中一个mode这个mode被称为CurrentMode,如果需要切换Mode只能退出loop,再重新指定一个mode 进入
4.添加观察者 CFRunLoopAddObserver 
5.CF的内存管理 
  1)凡是带有Create,copy,Retain等字眼的函数,创建出来的对象,都需要在最后做一次release
 比如CFRunLoopObserverCreate
  2,)release函数:CFRelease(对象)
6.线程在完成它的任务后,,就会进入销毁状态:这时可以搞个常驻线程(在线程要执行任务内容中加入,启动一个RunLoop)
7.将RunLoop放入自动释放池, 可以让RunLoop睡眠之前释放
 
什么是RunLoop?
从字面意思看,运行循环,跑圈
其实它内部就是do-while循环,在这个循环内部不断的处理各种任务(比如source,timer,observer)
一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run方法)
RunLoop只能选择启动一个Mode启动,如果当前Mode中没有任何source,timer,observer,那么就直接退出RunLoop
 
在应用开发中如何使用RunLoop,什么应用场景?
1),开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程来发消息,处理其它事件)
再子线程开启一个定时器
在子线程中进行一些长期监控
 
2)可以使用控制定时器在特定模式下执行
可以让某些事件(行为,任务)在特定模式下执行
3)可以添加Observer监听RunLoop的状态,比如监听事件的处理(在所有点击事件之前做一些事情)
原文地址:https://www.cnblogs.com/ouyangxiaoyao/p/5289721.html