GCD常用的函数

1、延迟函数

//延迟执行

//[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task) userInfo:nil repeats:YES];

//[self performSelector:@selector(task) withObject:nil afterDelay:3.0];

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

//GCD延迟执行

/*

第一个参数:表示从什么时候开始计时 DISPATCH_TIME_NOW:现在

第二个参数:间隔的时间

第三个参数:队列,决定block在哪个线程中调用,只有当队列是主队列的时候才在主线程调用

第四个参数:

*/

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{

NSLog(@"----GCD---%@",[NSThread currentThread]);

});

2、栅栏函数

//1.创建并发队列

dispatch_queue_t queue = dispatch_queue_create("www.yifuj.com", DISPATCH_QUEUE_CONCURRENT);

//2.使用异步函数添加任务

dispatch_async(queue, ^{

for (NSInteger i = 0; i<10; i++) {

NSLog(@"download 1--%zd-%@",i,[NSThread currentThread]);

}

});

dispatch_async(queue, ^{

for (NSInteger i = 0; i<10; i++) {

NSLog(@"download 2--%zd-%@",i,[NSThread currentThread]);

}

});

dispatch_async(queue, ^{

for (NSInteger i = 0; i<10; i++) {

NSLog(@"download 3--%zd-%@",i,[NSThread currentThread]);

}

});

//栅栏函数:控制队列中任务的执行顺序,前面的所有任务执行完毕之后执行栅栏函数,自己执行完毕之后再之后后面的任务

dispatch_barrier_async(queue, ^{

NSLog(@"++++++++++++++++++++++++++");

});

dispatch_async(queue, ^{

for (NSInteger i = 0; i<10; i++) {

NSLog(@"download 4--%zd-%@",i,[NSThread currentThread]);

}

});

dispatch_async(queue, ^{

for (NSInteger i = 0; i<10; i++) {

NSLog(@"download 5--%zd-%@",i,[NSThread currentThread]);

}

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 4,290评论 0 3
  • 3.GCD GCD的全称是Grand Central Dispatch,提供了非常多的纯C语言的函数 GCD的优势...
    Mario_ZJ阅读 3,418评论 0 0
  • #import "ViewController.h" @interface ViewController () @...
    艾克12138阅读 1,553评论 0 0
  • 0.)前言: 暑假的开始的第二周,开始上紧发条用Ruby On Rails时做网页的imgaeUpload功能,过...
    小慷阅读 1,683评论 0 0
  • 劝君莫惜金缕衣, 劝君更惜少年时。 花开堪折直须折, 莫待无花空折枝。
    rainsnjs阅读 2,312评论 0 0