IT门户网,专注电脑知识与技术及手机硬件信息服务网站!

当前位置:IT门户网 > 系统教程 >

在IOS中利用多线程

时间:2021-09-14    来源:IT门户网    人气:

多线程是一个较量轻量级的要领来实现单个应用措施内多个代码执行路径。 在系统级别内,措施并排执行,措施分派到每个措施的执行时间是基于该措施的所需时间和其他措施的所需时间来抉择的。 然而,在每个措施内部,存在一个可能多个执行线程,它同时或在一个险些同时产生的方法里执行差异的任务。 提要提示: iphone中的线程应用并不是无控制的,官方给出的资料显示,iPhone OS下的主线程的仓库巨细是1M,第二个线程开始就是512KB,而且该值不能通过编译器开关或线程API函数来变动,只有主线程有直接修改UI的本领 一、线程概述 有些措施是一条直线,起点到终点——如简朴的hello world,运行打印完,它的生命周期便竣事了,像是好景不常。 有些措施是一个圆,不绝轮回直到将它割断——如操纵系统,一直运行直到你关机。 一个运行着的措施就是一个历程可能叫做一个任务,一个历程至少包括一个线程,线程就是措施的执行流。 Mac和IOS中的措施启动,建设好一个历程的同时,一个线程便开始运作,这个线程叫做主线程。主线成在措施中的位置和其他线程差异,它是其他线程最终的父线程,且所有的界面的显示操纵即AppKit或UIKit的操纵必需在主线程举办。 系统中每一个历程都有本身独立的虚拟内存空间,而同一个历程中的多个线程则公用历程的内存空间。 每建设一个新的进成,都需要一些内存(如每个线程有本身的stack空间)和耗损必然的CPU时间。 当多个进成对同一个资源呈现争夺的时候需要留意线程安详问题 建设线程 建设一个新的线程就是给历程增加一个执行流,所以新建一个线程需要提供一个函数可能要领作为线程的入口。 1.利用NSThread NSThread提供了建设线程的路径,还可以提供了监测当前线程是否是主线程的要领利用NSThread建设一个新的线程有两种方法: 1.建设一个NSThread的工具,挪用Start要领——利用一个方针工具的要领初始化一个NSThread工具,可能建设一个担任自NSThread的子类,实现起main要领?,然后在直接建设这个子类的工具。 2.利用detachNewThreadSelector:toTarget:withObject:这个类要领建设一个子线程,这个较量直接,直接利用方针工具的要领作为线程启动进口 2.利用NSObject 利用NSObject直接就插手了对多线程的支持,答允工具的某个要领在靠山运行。

[my0bj performSelectorInBackground:@selector(doSomething) withObject:nil];

3.POSIX Thread 由于Mac和IOS都是基于Darwin系统,Darwin系统的UNX内核,是基于mach和BSD的,担任了BSD的POSIX接口,所以可以直接利用POSIX线程的相关接口开实现线程 建设线程的接口为 pthread_create, 虽然在建设线程之前可以建设好相关线程的属性 —————————————————————————————————————— NSOperation&NSOperationQueue 许多时候我们利用多线程,需要节制线程的并发数,究竟线程也是需要耗损系统资源的,当措施中同时运行的线程过多时,系统一定变慢,所以许多时候我们会节制同时运行线程的数目 NSOperation可以封装我们的操纵,然后将建设好的NSOperation工具放到NSOperationQueue行列中,OperationQueue便开始启动新的线程去执行行列中的操纵,OperationQueue的并发数时可以通过如下方法举办配置的: - (void)setMaxConcurrentOperationCount:(NSInteger)count GCD时Grand central Dispatch的缩写,是一系列BSD层面的接口。在mac10.6和IOS4.0今后才引入的且此刻NSOperation和NSOperationQueue的多线程的实现就是基于GCD的。今朝这个特性也被移植到 FreeBSD上了,可以查察libdispatch这个开源项目。

dispatch_queue_t imageDownloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

虽然,GCD除了处理惩罚多线程外尚有许多很是好的成果,其成立在强大的kqueue之上,效率也可以或许获得保障。 媒介 在多线程简介中,我已经说明过了,为了提高界面的流通度以及用户体验。我们务须要把耗时的操纵放到此外线程中去执行,千万不要阻塞主线程。 下面IT派别网小编给各人带来三种ios多线程编程要领: NSThread Grand Centeral Dispatch(GCD) NSOperation和NSOperationQueue 1.NSThread 这是最轻量级的多线程的要领,利用起来最直观的多线程编程要领。可是因为需要本身打点线程的生命周期,线程同步。常常利用NSThread举办调试,在实际项目中不推荐利用。

//获取当前线程NSThread *current = [NSThread currentThread];//获取主线程NSThread *main = [NSThread mainThread];NSLog(@"当前线程 --- %@",current);NSLog(@"主线程 --- %@",main);

节制台输出功效: 2015-11-22 22:30:29.572 多线程demo[1289:2925847] 当前线程 — {number = 1, name = main} 2015-11-22 22:30:29.572 多线程demo[1289:2925847] 主线程 — {number = 1, name = main} 从功效我们看出当前的线程就是主线程, number 相当于线程的id, name 是线程的名称,主线程的number就是1 阻塞线程:

//阻塞线程3秒[NSThread sleepForTimeInterval:3];[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];

相关文章

系统教程排行榜

更多>>

网络知识排行榜

更多>>

系统教程排行榜

更多>>

服务号