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
  • 相关阅读:
    BNUOJ 12756 Social Holidaying(二分匹配)
    HDU 1114 Piggy-Bank(完全背包)
    HDU 2844 Coins (多重背包)
    HDU 2602 Bone Collector(01背包)
    HDU 1171 Big Event in HDU(01背包)
    HDU 2571 命运 (入门dp)
    HDU 1069 Monkey and Banana(最长递减子序列)
    HDU 1160 FatMouse's Speed (最长上升子序列)
    HDU 2594 KMP
    POJ 3783 Balls --扔鸡蛋问题 经典DP
  • 原文地址:https://www.cnblogs.com/crazygeek/p/5538139.html
Copyright © 2011-2022 走看看