多线程创建 方法三: GCD 基础
来源:互联网 发布:方正字体包for mac 编辑:程序博客网 时间:2024/05/17 08:16
//// RootViewController.m// GCD//// Created by zm on 14-11-26.// Copyright (c) 2014年 practice. All rights reserved.///** * GCD 中的三种执行队列 * 1. dispatch_get_mainqueue() 串行队列(跟主线程相关,UI方面的操作需要加入到这个队列) * 2. dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags) 并行队列 * 3. dispatch_queue_create(const char *label, dispatch_queue_attr_t attr) */#import "RootViewController.h"@interface RootViewController (){ dispatch_queue_t _mainQueue; dispatch_queue_t _globalQueue; dispatch_queue_t _userQueue; //自定义队列}@end@implementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;}- (void)viewDidLoad{ [super viewDidLoad]; /** * 获取跟主线程相关的执行队列 * * MainQueue 和 GlobalQueue 都是系统提供的 * * _userQueue 创建类型 * DISPATCH_QUEUE_SERIAL 串行 * DISPATCH_QUEUE_CONCURRENT 并行 */ _mainQueue = dispatch_get_main_queue(); _globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //_userQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL); _userQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); //以异步的方式把 block 加到队列中去 dispatch_async(_globalQueue, ^{ NSString *strUrl = @"http://p0.meituan.net/mmc/b5415ecd02850feaac07b5f1a95c040b46622.jpg"; NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:strUrl]];// NSData 同步方式请求数据 // 嵌套主线程,在主线程中刷新 UI dispatch_async(_mainQueue, ^{ UIImage *image = [UIImage imageWithData:data]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.frame = CGRectMake(100, 100, 100, 100); [self.view addSubview:imageView]; }); }); [self method_MainQueue];}-(void)method_GlobalQueue{ /** * 并行队列,支持并行和串行,取决于你的使用方式 * dispatch_sync 串行 * dispatch_async 并行 */ dispatch_async(_globalQueue, ^{ NSLog(@"A"); }); dispatch_async(_globalQueue, ^{ NSLog(@"B"); }); dispatch_sync(_globalQueue, ^{ NSLog(@"C"); }); /** * */ dispatch_sync(_globalQueue, ^{ NSLog(@"A"); }); dispatch_sync(_globalQueue, ^{ NSLog(@"B"); }); dispatch_sync(_globalQueue, ^{ NSLog(@"C"); }); }-(void)method_MainQueue{ /** * _mainQueue 只支持串行,跟调用方式无关 * dispatch_async ,dispatch_sync 均是按顺序执行 */ dispatch_async(_mainQueue, ^{ NSLog(@"E"); }); dispatch_async(_mainQueue, ^{ NSLog(@"F"); }); dispatch_async(_mainQueue, ^{ NSLog(@"G"); }); }-(void)method_UserQueue{ /** * 由创建时的类型决定是否支持串行,并行 * */ dispatch_async(_userQueue, ^{ NSLog(@"I"); }); dispatch_async(_userQueue, ^{ NSLog(@"J"); }); dispatch_async(_userQueue, ^{ NSLog(@"K"); }); dispatch_async(_userQueue, ^{ NSLog(@"L"); }); // dispatch_sync(_userQueue, ^{ NSLog(@"I"); }); dispatch_sync(_userQueue, ^{ NSLog(@"J"); }); dispatch_sync(_userQueue, ^{ NSLog(@"K"); }); dispatch_sync(_userQueue, ^{ NSLog(@"L"); }); }@end
0 0
- 多线程创建 方法三: GCD 基础
- 使用GCD创建多线程
- iPhone多线程(GCD)三
- GCD的多线程基础
- GCD创建线程基础
- iOS 创建多线程的三种方法
- Java创建多线程的三种方法
- java创建多线程的三种方法
- Java创建多线程的三种方法
- iOS多线程之三 GCD
- IOS 多线程初探(三) - GCD
- 多线程总结之GCD基础
- iOS 09-GCD多线程基础
- iOS的三种多线程技术----GCD
- GCD高级用法(三) 多线程单例
- [多线程之三]-gcd操作练习
- java 三种多线程的创建方法Thread,Handler,Runnable
- java 三种多线程的创建方法Thread,Handler,Runnable
- Android网络编程之——Android登录系统模块的实现(服务器端Servlet+Mysql)
- BZOJ 3770 疯狂的限制
- 我是如何在SQLServer中处理每天四亿三千万记录的
- 树链剖分
- CSS定义网页滚动条和去掉滚动条的方法
- 多线程创建 方法三: GCD 基础
- iOS 定位和地图
- ceph存储 ceph集群配置
- 简易版之最短距离 2083
- 用javascript 面向对象制作坦克大战(二)
- [Cocoa]_[初级]_[几种在Cocoa应用程序经常用到的几种信息提示框]
- 网站做好内链seo优化的几个小窍门
- HEVC代码追踪(五):compressSlice
- 文本的输入输出