`
119568242
  • 浏览: 419414 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[ios] GCD-Grand Central Dispatch

    博客分类:
  • ios
 
阅读更多

GCD

Grand Central Dispatch

大中枢派发。//感觉类似  android handler 但是好像更强大的样子

用于将BLOCK 放到其他线程中执行。

使用C语言。 并且 队列执行完 需要手动release(队列名)。


举例:适用于从网络获取数据。并且更新ui(更新UI使用GDC的dispath_async(dispatch_get_mainqueue(),^{block内容}) 此段代码含义为 在主线程队列执行 block内容)


demo:

一个通过gdc获取网络图片并且刷新ui的demo

- (void)viewWillAppear:(BOOL)animated

{

 

    dispatch_queue_t downloadQueue = dispatch_queue_create("xxx", NULL);

 

//创建队列

      dispatch_async(downloadQueue,^{

执行内容

dispatch_async(dispatch_get_main_queue(), ,^{需要在主线程执行的内容})

刷新ui需要放到主线程

});

     //执行(异步,执行线程为队列所在进程)

}

 

 

 注:

dispatch_async(”队列名,string[非NSString C语言]“,block内容)。

异步执行时 所在线程名,为队列名线程[DEMO的话就在名为”XXX“线程];


=======================

 

Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0。
GCD是一个替代诸如NSThread等技术的很高效和强大的技术。GCD完全可以处理诸如数据锁定和资源泄漏等负责的异步编程问题。
GCD可以完成很多事情,但是该文仅关注在iOS应用中实现多线程所需的一些基础知识。
在开始之前,需要理解是要提供给GCD队列的是代码块,用于在系统或者用户创建的的队列上调度运行。
声明一个队列 
如下会返回一个用户创建的队列:

dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);

其中,第一个参数是标识队列的,第二个参数是用来定义队列的参数(目前不支持,因此传入NULL)。
执行一个队列 
如下会异步执行传入的代码:

dispatch_async(myQueue, ^{ [self doSomething]; });

其中,首先传入之前创建的队列,然后提供由队列运行的代码块。
声明并执行一个队列 
如果不需要保留要运行的队列的引用,可以通过如下代码实现之前的功能:

dispatch_async(dispatch_queue_create ("com.iphonedevblog.post", NULL), ^{ [self doSomething]; });

暂停一个队列 
如果需要暂停一个队列,可以调用如下代码。暂停一个队列会阻止和该队列相关的所有代码运行。

dispatch_suspend(myQueue);

恢复一个队列 
如果暂停一个队列不要忘记恢复。暂停和恢复的操作和内存管理中的retain和release类似。调用dispatch_suspend会增加暂停计数,而dispatch_resume则会减少。队列只有在暂停计数变成零的情况下才开始运行。dispatch_resume(myQueue);
从队列中在主线程运行代码 
有些操作无法在异步队列运行,因此必须在主线程(每个应用都有一个)上运行。UI绘图以及任何对NSNotificationCenter的调用必须在主线程长进行。在另一个队列中访问主线程并运行代码的示例如下:

dispatch_sync(dispatch_get_main_queue(), ^{ [self dismissLoginWindow]; });

注意,dispatch_suspend (以及dispatch_resume)在主线程上不起作用。
小结
目前我们已经介绍了GCD可以做到的一些基础,在本文中介绍的应该可以让你起步并轻松处理多线程。
更多信息,可以参阅Apple的Grand Central Dispatch Technology Brief 链接.
祝编码快乐! 
Ricky.
以上
分享到:
评论

相关推荐

    GCD IOS example

    Grand Central Dispatch (GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更...

    IOS 多线程GCD详解

    Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。 dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。 #definedispatch_get_main_queue() \DISPATCH...

    Async.OC:Objective-C中的语法糖,用于Grand Central Dispatch中的异步调度

    异步OC 用Objective-C重写... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), ^{ NSLog ( @" A: This is run on the background " ); dispatch_async ( dis

    详解iOS多线程GCD问题

    GCD是Grand Central Dispatch的简称,它是基于C语言的。如果使用GCD,完全由系统管理线程,我们不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue)。GCD会负责创建线程和调度你...

    iOS多线程GCD和线程锁的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,卖票的例子来讲NSThread的线程同步,使用了两种锁,一种NSCondition ,一种是:NSLock,还有加了一个 线程3 去唤醒其他两个线程锁中的wait,里面的注释很已经写的...

    iOS应用程序中通过dispatch队列控制线程执行的方法

    Grand Central Dispatch简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统,iOS应用程序中通过dispatch队列控制线程执行则是以并发来达到多核优化的重要途径.

    Mac.OS.X和iOS中的并行开发

    This concise book shows you how to use Apple's Grand Central Dispatch (GCD) to simplify programming on multicore iOS devices and Mac OS X. Managing your application’s resources on more than one ...

    ios 多线程编程指南.pdf

    如操作对象(Operation objects)和Grand Central Dispatch(GCD),提供一个更加现代化和高效率的基础设施来实现多核并发,但是Mac OS X和iOS也提供一套接口来创建和管理线程。 本文档介绍了Mac OS X上面的可用线程...

    iOS 多线程编程指南 中文版

    虽然更新的技术 如操作对象(Operation objects)和 Grand Central Dispatch(GCD),提供一个更 加现代化和高效率的基础设施来实现多核并发,但是 Mac OS X 和 iOS 也提供一套接 口来创建和管理线程。 本文档介绍了 Mac ...

    多线程GCD的使用

    iOS多线程编程之Grand Central Dispatch(GCD)使用,具有1、常用的方法dispatch_async 2、dispatch_group_async 3、dispatch_barrier_async 4、dispatch_apply的用法

    Concurrency by Tutorials - iOS 并发编程指南 (EPub格式)

    了解Grand Central Dispatch,Apple对C的libdispatch的实现,也称为GCD,因为它是排队任务并行运行的最简单方法之一。 然后,当GCD没有完全削减它时,采取操作和操作队列; 您将学习如何进一步定制和重用您的并发...

    Pro Multithreading and Memory Management for iOS and OS X

    Pro Multithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks

    frida-scripts

    钩住了iOS的Grand Central Dispatch(GCD)。 这对于显示线程创建很有用。 打印回溯时,您甚至可以了解整个程序流程。 在高负载下( CommCenter其连接到CommCenter ,打印可能会出现CommCenter ,但是效果很好。 在...

    CFHipsterRef

    Grand Central Dispatch Inter-Process Communication CoreServices ImageI/O Accelerate Security SystemConfiguration International Components for Unicode DictionaryServices Xcode Toolchain Third-Party ...

    ios 多线程编程指南

    线程是单个应用中可以并发执行多个代码路径的多种技术之一。虽然更新的技术 如操作对象(Operation objects)和 Grand Central Dispatch(GCD),

    iOS多线程编程之NSThread的使用案例

    2、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用)3、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度...

    详解IOS中GCD的使用

    Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行...

    iOS多线程编程指南

    线程是单个应用中可以并发执行多个代码路径的多种技术之一。虽然更新的技术 如操作对象(Operation objects)和 Grand Central Dispatch(GCD),

    详解iOS多线程GCD的使用

    Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,本文给大家详细介绍IOS中GCD的使用,需要的朋友参考下

    CocoaheadsHBAsyncSearch:一个 iOS 演示项目,展示了在输入 UITextField 时进行异步实时搜索的两种方式(GCD 和 NSOperation)

    使用标准的 Grand Central Dispatch 调用和 NSOperations 进行一次实时搜索。 您可以轻松比较并查看它是如何完成的。 这个项目是CocoaHeads Bremen讨论的结果。截屏运行中的应用程序的三个屏幕。特征显示使用Grand ...

Global site tag (gtag.js) - Google Analytics