厦门ios培训:iOS夯实之RunLoop

 
厦门ios培训技术专家意图通过本篇文章用简洁易懂的语言归纳runLoop和对我们日常开发的影响。
 
1. 什么是RunLoop
 
runLoop是一个与线程相关的机制。
 
    在应用程序层面,无论在哪个操作系统,所有线程的运行方式基本是一样的。在线程开始运行后,都在running, ready, 或是 blocked状态中切换,直至终止。在创建一个新的线程的时候,我们必须指定入口函数(entry-point function)。当入口函数执行完毕或是我们主动终止线程,线程就会停止运行然后被系统回收。
 
    如果任务执行完毕,线程就被回收,那么下一个新的任务来,我们还需要重新创建和配置一个线程。非常地消耗性能,这个时候就引出了我们的Runloop机制。用Runloop来实现线程的常驻。
 
Runloop可以简单理解为一个循环。
 
func loop() {
 
repeat {
 
var event = nextEvent();
 
process(event);
 
} while (event != quit);
 
}
 
    在这个循环里面等待事件,然后处理事件。而这个循环是基于线程的。 通过RunLoop这样的机制,线程能够在没有事件需要处理的时候休息,有事情的时候运行。减轻CPU压力。
 
2. 日常开发中的RunLoop
 
    简单理解了RunLoop之后,我们发现其实我们平时的开发,背后都无时无刻与runLoop有关。
 
    但是我们很幸运不需要把时间都浪费在纠结这些底层细节上,绝大部分工作都交给了操作系统为我们实现。所以关于runLoop,我们在不想被底层细节包围的前提下,需要了解和做些什么呢。
 
1. 需要了解RunLoop的坑:
 
NSTimer
 
    日常开发中,我们与runLoop接触得最近可能就是通过NSTimer了。一个Timer一次只能加入到一个RunLoop中。我们日常使用的时候,通常就是加入到当前的runLoop的default mode中。
 
    提到mode,就需要谈谈RunLoop Modes
 
    简单的说,runLoop有多个Mode,RunLoop只能运行一个Mode,runLoop只会处理它当前Mode的事件。
 
    所以就会导致一些地方我们需要去注意。
 
    一般Timer是运行在RunLoop的default mode上,而ScrollView在用户滑动时,主线程RunLoop会转到UITrackingRunLoopMode。而这个时候,Timer就不会运行,方法得不到fire。
 
    在一次写一个注册界面的时候,用户点击发送验证码后,使用Timer,倒数60秒以允许用户再次申请发送验证码,同时每一秒更新界面秒数信息。而此时Timer运行于主线程的default mode上。若此时用户滑动显示屏,则会出现Timer失效,界面得不到更新的情况。此时就是因为RunLoop的mode原因。
 
    NSURLConnection,NSStream也是同样的情况,默认运行于default mode。
 
2. 解决方案:
 
    先进种:设置RunLoop Mode,例如NSTimer,我们指定它运行于NSRunLoopCommonModes,这是一个Mode的集合。注册到这个Mode下后,无论当前runLoop运行哪个mode,事件都能得到执行。
 
    第二种:另一种解决Timer的方法是,我们在另外一个线程执行和处理Timer事件,然后在主线程更新UI.

本文由电玩城赌场》赌场澳门app》网上信誉赌场-IT培训的领航者汇集整理,转载请注明作者及出处。

如需学习java、php、网络营销、IOS、android、UI设计、嵌入式、.NET等课程,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

中软国际(厦门)香港上市公司,专业IT培训机构,专注IT培训33年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、php培训、IOS培训、安卓培训、UI设计培训、嵌入式培训、.NET培训等培训课程。217家合作院校,450家合作企业,真实项目实战,素质拓展,职业规划。零首付,完善的就业服务,先就业,后付款。

较牛逼的毕业学员入职名企享受高薪就业。580家合作企业,年培育学员人数逾6000人,毕业学员就职于百度、腾讯、阿里巴巴、IBM、华为科技、三星通讯、建发集团、雅马哈等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

鼎盛娱乐,鼎盛娱乐平台,鼎盛娱乐app-福莱特集团《82519》 | 澳门赌博真钱,澳门赌博官网,澳门赌博大全-东萌工程《82519》 |