NSRunLoop是Cocoa框架中的类,与之的Core Fundation 中CFRunLoopRef类.
这两者的区别是,前者不是线程安全的,而后者是线程安全的.
RunLoop的应用
一般我们不需要创建或者显示启动RunLoop,有两种情况,我们需要必须手动设置它:
在分线程中使用定时器
定时器的实现便是基于RunLoop的,平时我们使用定时器或许没有对RunLoop做什么操作,那是因为主线程RunLoop默认是启动运行的, 如果我们在子线程中也需要重复执行某一个动作,就需要手动进行操作添加
[[NSRunLoop currentRunLoop]run];
每条线程都有唯一的一个与之对应的RunLoop对象
主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
RunLoop在第一次获取时创建,在线程结束时销毁
作用:
a.保持程序的持续运行(iOS程序为什么能一直存活)
b.处理APP中的各种事件(比如触摸事件,定时器事件NSTimer,selector事件[performSelector)
c.节省CPU资源,提高程序性能,有事情就做事情,没事情就休息.
如果没有RunLoop,那么程序以启动就会退出,什么事情都做不了.
如果有了RunLoop,那么相当于在内部有了一个死循环,能够保证程序的持续运行
RunLoop更强大的地方在于对消息的监听,因为CFRunLoopRef的线程安全优势,我们通常会更多使用后者。
输入源被注册进Runloop中时会有方法进行remove,但是定时器却没有,但是定时器中的invalidate方法可以将其从runloop中移除,正如官方文档的说明:invalidate是重要也是唯一的可以将定时器从runloop的注销的方法,所以如果我们创建了定时器,就一定要在不使用时调用invalidate方法.
下载说明
☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,
☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!
☉唯一站长QQ:1004003180 [人格担保-本站注重诚信!]
☉购买建议E-mail:1004003180@qq.com 源码收购 E-mail:1004003180@qq.com
☉本站文件解压密码 【文章内都自带解压密码,每个密码不同!】