首页 > 代码库 > iOS多线程开发小demo6 GCD
iOS多线程开发小demo6 GCD
// DYFViewController.m// 623-07-GCD//// Created by dyf on 14-6-23.// Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved.//#import "DYFViewController.h"@interface DYFViewController ()@property (weak, nonatomic) IBOutlet UIImageView *iconView;@end@implementation DYFViewController- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. /* // 异步:具备开启新线程的能力 dispatch_async(<#dispatch_queue_t queue#>, ^{ <#code#> }); // 同步:不具备开启新线程的能力 dispatch_sync(<#dispatch_queue_t queue#>, ^{ <#code#> }) */}-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self testBackToMain];}- (void)testBackToMain { // 获取全局并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 异步队列 dispatch_async(queue, ^{ NSLog(@"-----%@", [NSThread currentThread]); // 下载图片 NSString *path = @"http://image.cache.xiu8.com/live/125/125/997729.jpg"; NSURL *url = [NSURL URLWithString:path]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *image = [UIImage imageWithData:data]; // 回到主线程显示图片 dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"-----------%@", [NSThread currentThread]); self.iconView.image = image; }); });}- (void)testOnce { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"once"); });}- (void)testDelay { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"222"); });}/** * 使用dispatch_async异步函数,在主线程中网主队列中添加任务 */- (void)testAsyncMainQueue { // 1.获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加任务到队列中,执行任务 dispatch_async(queue, ^{ NSLog(@"---------1-----%@", [NSThread currentThread]); }); // 总结:不开新线程 }/** * 使用dispatch_sync同步函数,在主线程中网主队列中添加任务,死:任务无法往下执行 */- (void)testSyncMainQueue { // 1.获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); // 2.添加任务到队列中,执行任务 dispatch_sync(queue, ^{ NSLog(@"---------1-----%@", [NSThread currentThread]); }); // 总结:不开新线程,所有任务在主线程中串行执行}// 凡是函数名中带有create、copy、new、retain等字眼,都需要在不需要使用这个数据的时候进行release// GCD的数据类型在ARC环境下不需要再做release// CF(Core Foundation)的数据类型在ARC环境下仍然要做release- (void)testCF { CFArrayRef array = CFArrayCreate(NULL, NULL, 11, NULL); CFRelease(array);}/** * 用dispatch_sync同步函数往串行队列中添加任务 */- (void)testSyncSerialQueue { // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("cn.dongyue.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.释放(MRC) //dispatch_release(queue); // 总结:不会开新的线程}/** * 用dispatch_sync同步函数往并发队列中添加任务 */- (void)testSyncGlobalQueue { // 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)testAsyncSerialQueue { // 1.创建串行队列 dispatch_queue_t queue = dispatch_queue_create("cn.dongyue.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)testAsyncGlobalQueue { // 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。