复习知识点:GCD多线程
GCD的基础
#pragma mark - 使用GCD 创建一个 串行 队列
// 第一种:系统提供的创建串行队列的方法
// 在真正的开发中如果需要创建串行队列,比较习惯用这种
// dispatch_queue_t queue = dispatch_get_main_queue(); #pragma mark - 使用GCD去创建 并行 队列
// 第一种:系统的
// 参数1:表示优先级(有四个,没有明显区别)
// 参数2:系统保留字
// dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); #pragma mark - 使用GCD并行队列 创建子线程
// 参数1:队列名
// 参数2:block// dispatch_async(queue, ^{
// NSLog(@"main1 = %@", [NSThread mainThread]);
// NSLog(@"current1 = %@", [NSThread currentThread]);
// });
// dispatch_async(queue, ^{
// NSLog(@"main2 = %@", [NSThread mainThread]);
// NSLog(@"current2 = %@", [NSThread currentThread]);
// });
// dispatch_async(queue, ^{
// NSLog(@"main3 = %@", [NSThread mainThread]);
// NSLog(@"current3 = %@", [NSThread currentThread]);
// });
// 。。。。创建N个 #pragma mark - 几秒之后去做每一件事
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// NSLog(@"3.0秒的时候");
// }); #pragma mark - 重复像一个队列中添加多个任务
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// 第一个参数:添加的数量
// 第二个参数:队列
// 第三个参数:block
// dispatch_apply(100, queue, ^(size_t index) {
// NSLog(@"%ld", index);
// }); #pragma mark - 分组
// // 创建一个分组
// dispatch_group_t group = dispatch_group_create();
// // 创建一个队列
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// // 创建任务1:
// dispatch_group_async(group, queue, ^{
// NSLog(@"i am 1");
// });
// // 创建任务2:
// dispatch_group_async(group, queue, ^{
// NSLog(@"i am 2");
// });
// 。。。。创建N个 // // 用于监听素有的任务执行的情况的 {所以此功能代码必须放在所有任务之后}
// dispatch_group_notify(group, queue, ^{
// NSLog(@"i am notify");
// }); #pragma mark - 并发中的串行 (披着羊皮的狼)
// // 创建的队列串行
// // DISPATCH_QUEUE_SERIAL 顺序执行
// // DISPATCH_QUEUE_CONCURRENT 无序执行
// dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
// dispatch_async(queue, ^{
// NSLog(@"test 1");
// });
// dispatch_async(queue, ^{
// NSLog(@"test 2");
// });
// 。。。。创建N个
代码展示:
#import "ViewController.h" @interface ViewController ()
/// 创建一个imageView
@property (nonatomic,strong) UIImageView *imgView;
/// 创建一个data用于接收数据
@property (nonatomic,strong) NSData *imageData; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 把imageView添加到视图上
self.imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.imgView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:self.imgView]; [self dataHandle];
}
#pragma mark - 解析数据
- (void)dataHandle {
__weak typeof(self) weakSelf = self;
// 创建子线程 在子线程中请求数据
dispatch_async(dispatch_queue_create(, DISPATCH_QUEUE_CONCURRENT), ^{
NSURL *url = [NSURL URLWithString:@"http://pic.58pic.com/58pic/13/11/15/83b58PICXf4_1024.jpg"];
// 接收数据
weakSelf.imageData = [NSData dataWithContentsOfURL:url];
// 返回主线程 刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
// 传值
weakSelf.imgView.image = [UIImage imageWithData:self.imageData];
});
}); } @end
复习知识点:GCD多线程的更多相关文章
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- iOS开发——GCD多线程详解
GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...
- GCD多线程的一个全面的题目
GCD多线程的一个全面的题目
- [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片
目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...
- JavaEE期末复习知识点总结
JavaEE期末复习知识点总结 Java企业应用开发环境 Maven的基础概念 Maven是一个项目管理工具,可以对 Java 项目进行构建.依赖管理 Maven仓库 Maven 仓库是项目中依赖的第 ...
- Object-C关于GCD多线程的使用
```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列, ...
- iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片
一.NSOperation的基本概念1.简介NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperatio ...
- GCD 多线程 初探
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...
- ios 使用GCD 多线程 教程
什么是GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中.GCD ...
随机推荐
- VS2013 RC 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral.........
微软发布了vs2013的RC版本,更新了自己机器上的vs,在创建项目过程中,发现出现如题的相关错误,查了相关msdn的资料,才了解到vs已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用 ...
- java内存映射文件
内存映射文件能够让我们创建和修改大文件(大到内存无法读入得文件),对于内存映射文件,我们可以认为是文件已经全部被读入到内存当中,然后当成一个大的数字来访问,简化修改文件的代码. 1.directBuf ...
- 面试题之String str = new String("abc"); 创建了几个对象
今天去面试的时候碰到了这个问题:String str = new String("abc"); 创建了几个对象,回来自己研究并查阅资料才发现答错了..网上的争论不少,有的说是两个, ...
- Lowest Common Ancestor of a Binary Tree, with Parent Pointer
Given a binary tree, find the lowest common ancestor of two given nodes in tree. Each node contains ...
- 微信 php 获取ticket
<?phpheader('content-type:text/html; charset=utf8');define('TOKEN', 'youtoken'); // TOKENdefine(' ...
- [LeetCode]题解(python):095-Unique Binary Search Trees II
题目来源: https://leetcode.com/problems/unique-binary-search-trees-ii/ 题意分析: 给一个整数,返回所有中序遍历是1到n的树. 题目思路: ...
- JVM报错提示
持久代被占满 异常:java.lang.OutOfMemoryError: PermGen space 说明: Perm空间被占满.无法为新的class分配存储空间而引发的异常.这个异常以前是没有的, ...
- word-break与word-wrap
本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别. 兼容 IE 和 FF 的换行 CSS 推荐样式 最好的方式是 以下是引用片段: ...
- HDU 2722 Here We Go(relians) Again
最短路,建图太麻烦,略过…… #include <cstdio> #include <cstring> #include <queue> const int INF ...
- java 解析国密SM2算法证书
首先说明用Java自带的解析x509证书类,是不能解析sm2算法的证书,执行会抛出异常. 用开源库bouncycastle能够解析.详细代码 private byte[] getCSPK(byte[] ...