zoukankan      html  css  js  c++  java
  • 复习知识点:GCD多线程

    GCD的基础

     1 #pragma mark - 使用GCD 创建一个 串行 队列
     2     // 第一种:系统提供的创建串行队列的方法
     3     // 在真正的开发中如果需要创建串行队列,比较习惯用这种
     4 //    dispatch_queue_t queue = dispatch_get_main_queue(); 
     5 
     6 #pragma mark - 使用GCD去创建 并行 队列
     7     // 第一种:系统的
     8     // 参数1:表示优先级(有四个,没有明显区别)
     9     // 参数2:系统保留字
    10 //    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
    11 
    12 #pragma mark - 使用GCD并行队列 创建子线程
    13     // 参数1:队列名
    14     // 参数2:block//    dispatch_async(queue, ^{
    15 //        NSLog(@"main1 = %@", [NSThread mainThread]);
    16 //        NSLog(@"current1 = %@", [NSThread currentThread]);
    17 //    });
    18 //    dispatch_async(queue, ^{
    19 //        NSLog(@"main2 = %@", [NSThread mainThread]);
    20 //        NSLog(@"current2 = %@", [NSThread currentThread]);
    21 //    });
    22 //    dispatch_async(queue, ^{
    23 //        NSLog(@"main3 = %@", [NSThread mainThread]);
    24 //        NSLog(@"current3 = %@", [NSThread currentThread]);
    25 //    });
    26 //    。。。。创建N个
    27 
    28 #pragma mark - 几秒之后去做每一件事
    29 //    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    30 //        NSLog(@"3.0秒的时候");
    31 //    });
    32 
    33 #pragma mark - 重复像一个队列中添加多个任务
    34 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
    35     // 第一个参数:添加的数量
    36     // 第二个参数:队列
    37     // 第三个参数:block
    38 //    dispatch_apply(100, queue, ^(size_t index) {
    39 //        NSLog(@"%ld", index);
    40 //    });
    41 
    42 #pragma mark - 分组
    43 //    // 创建一个分组
    44 //    dispatch_group_t group = dispatch_group_create();
    45 //    // 创建一个队列
    46 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
    47 //    // 创建任务1:
    48 //    dispatch_group_async(group, queue, ^{
    49 //        NSLog(@"i am 1");
    50 //    });
    51 //    // 创建任务2:
    52 //    dispatch_group_async(group, queue, ^{
    53 //        NSLog(@"i am 2");
    54 //    });
    55 //    。。。。创建N个
    56 
    57 //    // 用于监听素有的任务执行的情况的 {所以此功能代码必须放在所有任务之后}
    58 //    dispatch_group_notify(group, queue, ^{
    59 //        NSLog(@"i am notify");
    60 //    });
    61 
    62 #pragma mark - 并发中的串行 (披着羊皮的狼)
    63 //    // 创建的队列串行
    64 //    // DISPATCH_QUEUE_SERIAL 顺序执行
    65 //    // DISPATCH_QUEUE_CONCURRENT 无序执行
    66 //    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT);
    67 //    dispatch_async(queue, ^{
    68 //        NSLog(@"test 1");
    69 //    });
    70 //    dispatch_async(queue, ^{
    71 //        NSLog(@"test 2");
    72 //    });
    73 //    。。。。创建N个

    代码展示:

     1 #import "ViewController.h"
     2 
     3 @interface ViewController ()
     4 /// 创建一个imageView
     5 @property (nonatomic,strong) UIImageView *imgView;
     6 /// 创建一个data用于接收数据
     7 @property (nonatomic,strong) NSData *imageData;
     8 
     9 @end
    10 
    11 @implementation ViewController
    12 
    13 - (void)viewDidLoad {
    14     [super viewDidLoad];
    15     // Do any additional setup after loading the view, typically from a nib.
    16     // 把imageView添加到视图上
    17     self.imgView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    18     self.imgView.backgroundColor = [UIColor cyanColor];
    19     [self.view addSubview:self.imgView];
    20     
    21     [self dataHandle];
    22 }
    23 #pragma mark - 解析数据
    24 - (void)dataHandle {
    25     __weak typeof(self) weakSelf = self;
    26     // 创建子线程 在子线程中请求数据
    27     dispatch_async(dispatch_queue_create(0, DISPATCH_QUEUE_CONCURRENT), ^{
    28         NSURL *url = [NSURL URLWithString:@"http://pic.58pic.com/58pic/13/11/15/83b58PICXf4_1024.jpg"];
    29         // 接收数据
    30         weakSelf.imageData = [NSData dataWithContentsOfURL:url];
    31         // 返回主线程 刷新UI
    32         dispatch_async(dispatch_get_main_queue(), ^{
    33             // 传值
    34             weakSelf.imgView.image = [UIImage imageWithData:self.imageData];
    35         });
    36     });
    37     
    38 }
    39 
    40 @end
  • 相关阅读:
    [C#性能简析]泛型集合的使用
    理解自定义特性(Attribute)
    C语言第1次作业2.0版
    C语言第3次作业
    C语言第1次作业
    C语言第2次作业
    kubernetes 部署metricserver
    安装nginx
    C# Winform应用程序内存回收
    asp.net 数据库访问操作类
  • 原文地址:https://www.cnblogs.com/crazygeek/p/5538139.html
Copyright © 2011-2022 走看看