透明 发表于 2015-1-18 11:30:22

IOS制作之iOS多线程编程之Grand Central Dispatch(GCD)先容和利用仓酷云

很少去思考,没有去多问几个为什么。这是学习的大忌,我认识到了自己学习方法上的错误。孔子说,学而不思则罔,思而不学则殆。一点也没错,学和思是要结合的,这样才能进步。现在回想一下,我学到了什么?自己也无言以对了。先容:

GrandCentralDispatch简称(GCD)是苹果公司开辟的手艺,以优化的使用程序撑持多中心处置器和其他的对称多处置体系的体系。这创建在义务并行实行的线程池形式的基本上的。它初次公布在MacOSX10.6,iOS4及以上也可用。
计划:

GCD的事情道理是:让程序平行列队的特定义务,依据可用的处置资本,布置他们在任何可用的处置器中心上实行义务。
一个义务能够是一个函数(function)大概是一个block。GCD的底层仍然是用线程完成,不外如许可让程序员不必存眷完成的细节。
GCD中的FIFO行列称为dispatchqueue,它能够包管先辈来的义务先失掉实行
dispatchqueue分为上面三种:
Serial

又称为privatedispatchqueues,同时只实行一个义务。Serialqueue一般用于同步会见特定的资本或数据。当你创立多个Serialqueue时,固然它们各自是同步实行的,但Serialqueue与Serialqueue之间是并发实行的。
Concurrent

又称为globaldispatchqueue,能够并发地实行多个义务,可是实行完成的按次是随机的。
Maindispatchqueue

它是全局可用的serialqueue,它是在使用程序主线程上实行义务的。
我们看看dispatchqueue怎样利用
1、经常使用的办法dispatch_async

为了不界面在处置耗时的操纵时卡逝世,好比读取收集数据,IO,数据库读写等,我们会在别的一个线程中处置这些操纵,然后关照主线程更新界面。
用GCD完成这个流程的操纵比后面先容的NSThreadNSOperation的办法都要复杂。代码框架布局以下:

[*]dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
[*]//耗时的操纵
[*]dispatch_async(dispatch_get_main_queue(),^{
[*]//更新界面
[*]});
[*]});
假如如许还不明晰的话,那我们仍是用上两篇博客中的下载图片为例子,代码以下:

[*]dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
[*]NSURL*url=;
[*]NSData*data=[initWithContentsOfURL:url];
[*]UIImage*image=[initWithData:data];
[*]if(data!=nil){
[*]dispatch_async(dispatch_get_main_queue(),^{
[*]self.imageView.image=image;
[*]});
[*]}
[*]});
运转显现:

<br>
是否是代码比NSThreadNSOperation简便良多,并且GCD会主动依据义务在多核处置器上分派资本,优化程序。
体系给每个使用程序供应了三个concurrentdispatchqueues。这三个并发调剂行列是全局的,它们只要优先级的分歧。由于是全局的,我们不必要往创立。我们只必要经由过程利用函数dispath_get_global_queue往失掉行列,以下:

[*]dispatch_queue_tglobalQ=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
这里也用到了体系默许就有一个串行行列main_queue

[*]dispatch_queue_tmainQ=dispatch_get_main_queue();
固然dispatchqueue是援用计数的对象,可是以上两个都是全局的行列,不必retain或release。
2、dispatch_group_async的利用

dispatch_group_async能够完成监听一组义务是不是完成,完成后失掉关照实行其他的操纵。这个办法很有效,好比你实行三个下载义务,当三个义务都下载完成后你才关照界面说完成的了。上面是一段例子代码:

CoreAnimation---制作动画很强大很喜欢的框架可以用少量的代码写出漂亮的动画CQuartz2D---强大的2D绘图库COpenGL---不用介绍了超级强大的3D库CCoreImage---

灵魂腐蚀 发表于 2015-1-21 08:52:56

边吃零食边看Stanford的视频教程

仓酷云 发表于 2015-1-21 21:01:45

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

活着的死人 发表于 2015-1-25 10:02:42

AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

兰色精灵 发表于 2015-1-26 22:01:34

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

柔情似水 发表于 2015-2-2 11:26:50

在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解

再现理想 发表于 2015-2-7 18:55:43

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

飘灵儿 发表于 2015-2-12 06:28:38

中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,

小女巫 发表于 2015-3-2 23:11:15

这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。

再见西城 发表于 2015-3-7 05:06:10

中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,

金色的骷髅 发表于 2015-3-7 11:31:57

重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。

若天明 发表于 2015-3-10 12:58:13

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

爱飞 发表于 2015-3-17 07:11:17

中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,

分手快乐 发表于 2015-3-21 02:11:55

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

精灵巫婆 发表于 2015-4-4 03:46:50

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,

admin 发表于 2015-4-5 21:00:21

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

谁可相欹 发表于 2015-4-21 06:07:50

在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。

深爱那片海 发表于 2015-5-1 03:10:13

看完这个你就可以有多种选择来踏入做应用的阶段

蒙在股里 发表于 2015-6-14 21:48:32

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

愤怒的大鸟 发表于 2015-6-24 22:08:47

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
页: [1] 2
查看完整版本: IOS制作之iOS多线程编程之Grand Central Dispatch(GCD)先容和利用仓酷云