温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

gcd学习

发布时间:2020-08-05 23:52:05 来源:网络 阅读:481 作者:xinji0702 栏目:开发技术

补课GrandCentralDispatch


好吧,我看完51CTO的一篇文章,我彻底懂了.这货,就是为了解决NSThread解决不了的问题的;
是啊,多线程,就是多倍任务;经典的案例就是,UI不卡死,后台处理网络数据;
而用Queue来任务排队处理,经典的应用就是,请求有各种各样的类别,A类请求在A queue里排队; B类请求在B queue排队;这里A, B不一定是网络与本地的区分,更重要的是事务的区分,有人为的概念在其中;


dispatch_queue_t 真没啥可怕的,就当做ASIHttpRequestQueue一样,创建一个队列,然后你所有的操作,都是围绕这个队列里;
你可以添加任务,终止任务,执行任务;
连执行任务函数都非常类似
startSynchronous
dispatch_async
dispatch_sync

下面我抄袭一下

声明一个队列
如下会返回一个用户创建的队列:
dispatch_queue_t myQueue =dispatch_queue_create("com.iphonedevblog.post", NULL);
其中,第一个参数是标识队列的,第二个参数是用来定义队列的参数(目前不支持,因此传入NULL)。
执行一个队列
如下会异步执行传入的代码:
dispatch_async(myQueue, ^{ [selfdoSomething]; });
其中,首先传入之前创建的队列,然后提供由队列运行的代码块。
声明并执行一个队列
如果不需要保留要运行的队列的引用,可以通过如下代码实现之前的功能:
dispatch_async(dispatch_queue_create("com.iphonedevblog.post", NULL), ^{ [self doSomething]; });
暂停一个队列
如果需要暂停一个队列,可以调用如下代码。暂停一个队列会阻止和该队列相关的所有代码运行。
dispatch_suspend(myQueue);
恢复一个队列
如果暂停一个队列不要忘记恢复。暂停和恢复的操作和内存管理中的retainrelease类似。调用dispatch_suspend会增加暂停计数,而dispatch_resume则会减少。队列只有在暂停计数变成零的情况下才开始运行。dispatch_resume(myQueue);
从队列中在主线程运行代码
有些操作无法在异步队列运行,因此必须在主线程(每个应用都有一个)上运行。UI绘图以及任何对NSNotificationCenter的调用必须在主线程长进行。在另一个队列中访问主线程并运行代码的示例如下:
dispatch_sync(dispatch_get_main_queue(), ^{[self dismissLoginWindow]; });

dispatch_get_global_queue
dispatch_get_main_queue
dispatch_get_current_queue
谁能告诉我以上3queue的区别?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI