移动应用软件开发综合实训(基于iOS平台)-2017 使用GCD实现多线程 iOS多线程与GCD 你看我就够了.docxVIP

移动应用软件开发综合实训(基于iOS平台)-2017 使用GCD实现多线程 iOS多线程与GCD 你看我就够了.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS多线程与GCD 你看我就够了 在介绍多线程编程之前先介绍几个大家特别容易混淆,也是非常重要的概念。 同步/异步 同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B。只存在一个线程也就是主线程。 异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B。任务B不用等待任务A结束才执行。存在多条线程。 图1 同步示例图 图2异步示例图 并发/并行? 并行:指两个或多个时间在同一时刻发生。多核CUP同时开启多条线程供多个任务同时执行,互不干扰。 并发:指两个或多个事件在同一时间间隔内发生。可以在某条线程和其他线程之间反复多次进行上下文切换,看上去就好像一个CPU能够并且执行多个线程一样。其实是伪异步。如下并发图,在同一线程,任务A先执行了20%,然后A停止,任务B重新开始接管线程开始执行。 图3 并行示意图 图4 并发示意图 好了,简单谈了一下多线程可能涉及到的的概念,看官先消化一下,再接着往下看。 多线程是指在软件或硬件上实现多个线程并发执行的技术。通俗讲就是在同步或异步的情况下,开辟新线程,进行线程间的切换,以及对线程进行合理的调度,做到优化提升程序性能的目的。那么多线程编程会带给我们很多好处,同时也是一种容发生各种问题的编程技术。比如多个线程更新相同的资源会导致数据的不一致[数据竞争],停止等待时间的线程会导致多个线程相互持续等待[死锁],使用太多线程会消耗大量内存。 图5 多线程编程的问题 尽管多线程编程极易发生各种问题,但是呢也应当使用多线程编程,这是为什么呢?因为使用多线程编程可以保证应用程序的相应性能。利大于弊,小心使用即可。 应用程序在启动时,在主线程中描绘用户界面,处理触摸屏幕的事件等。如果在该主线程中进行长事件的处理,比如一些多请求的情况,就会妨碍主线程的执行[阻塞]。这样会妨碍主线程中被称为RunLoop[在iOS和OS X的应用中]的主循环的执行,从而导致不能更新用户界面,应用程序的画面长时间停滞等问题。而使用了多线程编程,在执行长时间的处理仍可保证用户界面的相应性能。 图6 多线程编程的优点 那么我们iOS开发者,苹果给我们提供了哪些多线程技术呢? 一.NSThread ? ? ? 我们先来介绍一下最古老但不怎么用的NSThread,下面是NSThread的所有API及注释,可参考了解,详细用法可以百度有哪些信誉好的足球投注网站详细用法,在这里不多做论述了哈~压轴的且看下文GCD。 + (NSThread*)currentThread; //获取当前线程 + (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(nullableid)argument;//这个方法可以直接生成一个线程并启动它,而且无需为线程的清理负责 + (BOOL)isMultiThreaded;// 判断是否为多线程 @property(readonly,retain) NSMutableDictionary *threadDictionary; + (void)sleepUntilDate:(NSDate*)date;//设置线程阻塞时间 + (void)sleepForTimeInterval:(NSTimeInterval)ti;//设置线程阻塞时间 + (void)exit;//退出 + (double)threadPriority;//优先级 + (BOOL)setThreadPriority:(double)p;//优先级 @property double threadPriority ? NS_AVAILABLE(10_6,4_0);// To be deprecated; use qualityOfService below @property NSQualityOfServicequalityOfService ?NS_AVAILABLE(10_10,8_0);// read-only after the thread is started + (NSArray *)callStackReturnAddressesNS_AVAILABLE(10_5,2_0);// 线程函数地址 + (NSArray *)callStackSymbols? NS_AVAILABLE(10_6,4_0);//查看方法被调用的callstack @property (nullable,copy) NSString*name ?NS_AVAILABLE(10_5,2_0);//线程名字 @property NSUInteger stackSize NS_AVAILABLE(10_5,2_0);//堆栈大小 @property (reado

您可能关注的文档

文档评论(0)

WanDocx + 关注
实名认证
文档贡献者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档