GCD使用二(队列使用)

GCD2-- 队列使用

asunc异步并发:
// 获得全局的并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 将 任务 添加 全局队列 中去 异步 执行
dispatch_async(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});

async异步串行:
// 1.创建一个串行队列
dispatch_queue_t queue = dispatch_queue_create("cn.heima.queue", NULL);

// 2.将任务添加到串行队列中 异步 执行
dispatch_async(queue, ^{
NSLog(@"-----下载图片1---%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"-----下载图片2---%@", [NSThread currentThread]);
});


GCD中获取串行队列2途径:
1.用dispatch_queue_creat函数创建串行队列
dispatch_queue_t
dispatch_queue_creat(const char *label, dispatch_queue_attr_t attr); //队列名称,属性(一般用NULL)
dispatch_queue_t queue = dispatch_queue_create("cn.itcast.queue", NULL);// 创建
dispatch_release(queue);//非ARC释放手动创建的队列

2.用主队列
GCD自带的一特殊串行队列
放在主队列的任务,都自动到主线程执行
使用dispatch_get_main_queue()获取主队列
dispatch_queue_t queue = dispatch_get_main_queue();


async异步
全局并发队列:
开启新线程,并发执行任务
手动创建串行队列:
开启新线程,串行执行队列
主队列:
不开启新线程,串行执行任务


内存管理方面:
//Fonndation:OC
//Core Foundation:C
NSString *str = @"123";
CFStringRef str2 = (_bridge CFStringRef)str;
NSString *str3 = (_bridge NSString *)str2;

CFArrayRe array = CFArrayCreate(NULL, NULL, 10,NULL);
CFRelease(array);

CGPathRef path = CGPathCreateMutable();
CGPathRelease(path);

/**
函数名带有creatcopy ew etain等字眼,在不用时需要release
GCD数据类型在ARC下不需要release
CF(Core Foundation)的数据类型在ARC下还需要release
*/

原文地址:https://www.cnblogs.com/fangchun/p/4688591.html