多线程:主队列

//
//  ViewController.m
//  09-主队列
//
//  Created by gzxzmac on 16/1/29.
//  Copyright © 2016年 gzxzmac. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    NSLog(@"start");
    [self gcdDemo2];
//    NSLog(@"end");
}
/*
 1. 主队列专门是给主线程使用的
 2. 不管是同步还是异步,都需要等待主线程有空闲
 3. 如果在主线程上,使用同步和主队列,造成死锁
 4. 同步和主队列,放在子线程上面才可以
 5. 主队列通过是子线程下载完之后,回到主线程刷新界面

 */
// 手机可以看 -》 面试的时候拿出来看看(笔试的时候)
// 建个群,求助攻 (2个小时或者一个小时)
// 十个问题。
// GCD 中使用create创建的也不需要我们手动去释放。(ARC)
- (void)gcdDemo {
    // 主队列不需要我们手动创建,它跟主线程(应用启动)一起生成
    dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_async(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
    NSLog(@"end");
}

// 主队列跟同步
- (void)gcdDemo1 {
    // 死锁 只有在主线程有空闲的时候才会调用
    dispatch_queue_t queue = dispatch_get_main_queue();
    // 同步-》 必须先执行同步的代码 主队列在等待主线程有空闲。同步在等待执行任务
    dispatch_sync(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
    NSLog(@"end");
}

// 解决同步加主队列的死锁问题
- (void)gcdDemo2 {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
         NSLog(@"%@",[NSThread currentThread]);
       dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"%@",[NSThread currentThread]);
       });
    });
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值