- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Swift多线程编程
摘要:Swift日渐成为iOS的主流开发语言,并有取代Objective-C之势,本文通过实例介绍了Swift开发中使用GCD方案进行多线程开发的方法,从而将App开发中多线程、异步运行、定时器等实际需求的复杂性充分简化。
关键词:iOS;Swift;多线程
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)02-0024-02
iOS开发方兴未艾,越来越多的开发者关注并加入iOS开发的行列。传统上进行iOS开发的唯一编程语言是Objective-C,作为上世纪八十年代出现的语言,Objective-C在语法和机制上与大众熟知的C/C++、Java等现代编程语言大相径庭,尤其它“怪异”的语法使得学习难度较大,许多初学者甚至是有经验的开发者也经常对此抱怨吐槽。为了解决这种不协调性,Apple公司在经过深思熟虑之后,在2014年WWDC上发布了新一代开发语言Swift,这种全新设计的语言一经问世便广受开发者欢迎,短短2年的时间,Swift在TIOBE编程语言排行榜上就上升到第12位,市场份额直追Objective-C。众多分析均认为,根据Apple的战略思路,Swift取代Objective-C成为Apple平台的主打语言只是时间的问题。
众所周知,受限于设备的软硬件环境,App的开?l难度要远远大于PC平台,为了在移动设备上完成一些丰富的功能,需要使用很多复杂的技术,多线程编程便是其中最为典型、最为普遍的一种,本文试图从Swift的角度,探讨其进行多线程开发的一些思路与方法。
无论是Android还是iOS的开发,都涉及一个几乎每个App都无法逃避的问题:UI和业务逻辑的并行运行。几乎所有的移动操作系统都不约而同地采用相同的架构:界面的更新必须在UI线程中进行,在UI以外的线程中更新界面都会造成软件的崩溃。这使得在移动平台上进行多线程开发变得更为复杂。
在iOS平台上,多线程开发基本上有三种思路:NSThread、NSOperation、GCD,三种方法各有优缺点,Apple官方推荐的是GCD方法。GCD 是用C语言开发并完整封装的多线程方案,通过使用 GCD,开发者可以利用简单的语法进行灵活的多线程编程。在多线程编程素有“复杂必死” 的名声,所以保持简单就是避免错误的金科玉律。在 Swift 中可以无缝使用 GCD 的 API 的,尤其得益于闭包特性的加入,使用起来比之前在 Objective-C 中更加简单方便。
关于GCD的介绍与教程有很多,初学者开始使用时往往被其复杂外表所吓退,其实GCD的使用非常简单,尤其是日常常见的多线程场景。GCD核心的概念是队列,我们需要在一个线程中执行某段代码时,只需要将这段代码提交给GCD的队列,剩下的线程的创建、调度、运行、销毁等操作,均由GCD帮我们自动完成。下面是一个简单的例子:
例1:
1 let gQueue : dispatch_queue_t =
dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 )
2 // 提交/派发到全局队列,GCD会负责线程调度
3 dispatch_async( gQueue,
4 {
5 sleep(5)
6 //在主线程中更改UI
7 dispatch_async(dispatch_get_main_queue(),
8 {
9 self.Label.text = 5秒钟过去的新消息
10 })
11 }
行1声明了一个“全局队列”,供我们提交线程里运行的代码段。
行3使用dispatch_async来提交代码段到刚声明的队列中,async表示这是一个异步任务。
行7-10的代码段会由GCD自动创建一个新的线程,并在新线程中运行。
行7再次提交一个代码段,这个代码段并不是提交到刚才声明的全局队列中,而是提交到“主队列”,主队列对应App的主线程,即UI线程;这部分代码段完成的工作是刷新界面,而刷新界面的操作必须在主线程中完成。
在例1中,我们接触到GCD的几个基本概念:队列、提交,其中,队列分为三种:
1)主队列(main):使用dispatch_get_main_queue()获取,提交到主队列的代码段会在主线程中运行。
2)全局队列(global):使用dispatch_get_global_queue()获取,提交到全局队列的代码段将在新建线程中运行。
3)用户创建队列(create):使用dispatch_queue_create()创建,用户队
您可能关注的文档
最近下载
- 《食品经营许可证》延续申请表.doc VIP
- 产教融合视角下的应用型高校微专业建设的探索与实践.docx VIP
- 【宏观专题】牛市进程:十大观察指标-250901-华创证券.pdf VIP
- IBM-中外运产品创新咨询项目IPD体系沟通材料_v1.0_20200228.pptx VIP
- 课件智慧管廊解决方案.pptx VIP
- 2024秋新人教版英语七年级上册课件 Starter Unit 2 Keep Tidy! Section B.pptx
- 油菜高产高效栽培技术详解演示文稿.ppt VIP
- 施工现场安全管理考核明细及罚款金额.doc
- 第5课 罗马城邦和罗马帝国 课件(共23张PPT).pptx VIP
- 血栓相关课件.pptx
文档评论(0)