// 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release
@implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackground:@selector(test) withObject:nil]; // [self syncMainQueue]; } - (void)test { NSLog(@"test --- %@", [NSThread currentThread]); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"任务 --- %@", [NSThread currentThread]); }); } /** * 使用dispatch_async异步函数, 在主线程中往主队列中添加任务 */ - (void)asyncMainQueue { // 1.获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加任务到队列中 执行 dispatch_async(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); } /** * 使用dispatch_sync同步函数, 在主线程中往主队列中添加任务 : 任务无法往下执行 */ - (void)syncMainQueue { // 1.获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加任务到队列中 执行 dispatch_sync(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); // dispatch_sync(queue, ^{ // NSLog(@"----下载图片2-----%@", [NSThread currentThread]); // }); // dispatch_sync(queue, ^{ // NSLog(@"----下载图片3-----%@", [NSThread currentThread]); // }); // 不会开启新的线程, 所有任务在主线程中执行 } // 凡是函数名种带有create\copy\new\retain等字眼, 都需要在不需要使用这个数据的时候进行release // GCD的数据类型在ARC环境下不需要再做release // CF(Core Foundation)的数据类型在ARC环境下还是需要再做release /** * 用dispatch_sync同步函数往串行列中添加任务 */ - (void)syncSerialQueue { // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", NULL); // 2.添加任务到队列中 执行 dispatch_sync(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"----下载图片2-----%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"----下载图片3-----%@", [NSThread currentThread]); }); // 3.释放资源 // dispatch_release(queue); // MRC(非ARC) // 总结: 不会开启新的线程 } /** * 用dispatch_sync同步函数往并发队列中添加任务 */ - (void)syncGlobalQueue { // 1.获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 2.添加任务到队列中 执行 dispatch_sync(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"----下载图片2-----%@", [NSThread currentThread]); }); dispatch_sync(queue, ^{ NSLog(@"----下载图片3-----%@", [NSThread currentThread]); }); // 总结: 不会开启新的线程, 并发队列失去了并发的功能 } /** * 用dispatch_async异步函数往串行队列中添加任务 */ - (void)asyncSerialQueue { // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", NULL); // 2.添加任务到队列中 执行 dispatch_async(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"----下载图片2-----%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"----下载图片3-----%@", [NSThread currentThread]); }); // 总结: 只开1个线程执行任务 } /** * 用dispatch_async异步函数往并发队列中添加任务 */ - (void)asyncGlobalQueue { // 1.获得全局的并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 2.添加任务到队列中 执行 dispatch_async(queue, ^{ NSLog(@"----下载图片1-----%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"----下载图片2-----%@", [NSThread currentThread]); }); dispatch_async(queue, ^{ NSLog(@"----下载图片3-----%@", [NSThread currentThread]); }); // 总结: 同时开启了3个线程 } @end
时间: 2024-11-03 21:20:26