您的位置:首页 > 其它

多线程:主队列

2016-03-25 23:26 260 查看
//
//  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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: