OC 线程操作 - GCD使用 -线程通讯, 延迟函数和一次性代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
// [self downImage];
// [self delay];
[self once];
[self once];
[self once];
}
/**
一次性代码: 整个应用程序只会执行一次
不可以放在懒加载里面, 如果在类中使用一次性代码, 创建的第二个对象, 就完全不会初始化,
static : 全局变量
*/
-(void)once{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"---once---");
});
}
/**
常用函数 : 延迟方法
*/
-(void)delay{
NSLog(@"----start----");
/**
参数1:(nonnull SEL) 方法名字
参数2:(nullable id) 传递参数
参数3:(NSTimeInterval) 时间
*/
//1. 只在主线程执行
[self performSelector:@selector(task) withObject:nil afterDelay:];
//2.定时器方法 只在主线程执行
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(task ) userInfo:nil repeats:YES];
//3.GCD 可以在主线程和子线程执行
/**
参数1:DISPATCH_TIME_NOW 现在开始计算时间
参数2:延迟时间 2.0 GCD 时间单位:纳秒 NSEC_PER_SEC 1000000000ull
参数3:(NSTimeInterval) 时间
*/
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// [self task];
// });
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
[self task];
});
dispatch_queue_t global_queue = dispatch_get_global_queue(, );
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), global_queue, ^{
[self task];
});
}
- (void)task{
NSLog(@"---task---%@", [NSThread currentThread]);
}
//线程间通讯 - 各种嵌套
-(void)downImage{
//1. 创建异步函数, 这里只有一个任务,用并发和串行都可以
// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//
// });
dispatch_async(dispatch_get_global_queue(, ), ^{
//1.1确定URL
NSURL *url = [NSURL URLWithString:@"http://www.leawo.cn/attachment/201309/4/756352_1378261981fNNT.png"];
//1.2下载二进制数据到本地
NSData *data = [NSData dataWithContentsOfURL:url];
//1.3转换图片
UIImage *image = [UIImage imageWithData:data];
// [self.iv performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
// [self.iv performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
// dispatch_async(dispatch_get_main_queue(), ^{
// NSLog(@"=====%@", [NSThread currentThread]);
// self.iv.image = image;
// });
//这里不会死锁, 因为这个任务是在子线程里 创建的,
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"=====%@", [NSThread currentThread]);
self.iv.image = image;
});
});
}
OC 线程操作 - GCD使用 -线程通讯, 延迟函数和一次性代码的更多相关文章
- OC 线程操作 - GCD队列组
1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ ...
- OC 线程操作 - GCD快速迭代
- (void)forDemo{ //全都是在主线程操作的 ; i<; i++) { NSLog(@"--%@", [NSThread currentThread]); } ...
- CreateThread 线程操作与 _beginthreadex 线程安全(Windows核心编程)
0x01 线程的创建 线程不同于进程,Windows 中的进程是拥有 '惰性' 的,本身并不执行任何代码,而执行代码的任务转交给主线程,列如使用 CreateProcess 创建一个进程打开 Cmd ...
- OC 线程操作 - GCD使用 -同步函数,异步函数,串行队列,并发队列
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // GCD 开几条线程并不是我们 ...
- OC线程操作-GCD介绍
1. GCD介绍 1.11.2 1.3 异步具备开启能力但是不是 一定可以开启 1.4 1.5 67. 8.
- OC 线程操作 - GCD使用 - 栅栏函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏 ...
- OC 线程操作2 - NSThread
方法1 :直接创建 alloc init - (void)createNSThread111{ /* 参数1: (nonnull id) 目标对象 self 参数2:(nonnull SEL) ...
- ios线程和GCD
1.什么是进程? 进程是指在系统中正在运行的一个应用程序.比如同时打开QQ.Xcode,系统就会分别启动2个进程.截图 2.什么是线程? 1).一个进程要想执行任务,必须得有线程(每一个进程至少要有一 ...
- 创建线程方式-GCD
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
随机推荐
- ssh的应用和vnc连接桌面
什么是ssh? SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露.SSH之 ...
- NLP-Progress记录NLP最新数据集、论文和代码: 助你紧跟NLP前沿
Github https://github.com/sebastianruder/NLP-progress 官方网址 https://nlpprogress.com/ NLP-Progress 同时涵 ...
- webpack(2)--Entry
Entry entry是配置模块的入口,可以抽象成输入,webpack执行构建的第一步将从入口开始搜寻及递归解析出所有入口依赖的模块. 注意: entry是必填,若不填写则将导致webpack报错退出 ...
- CSS3基础
内容: 1.圆角 border-radius 2.阴影 text-shadow.box-shadow 3.渐变 linear.radial 4.rgba rgb+alpha opacity 5.tra ...
- 数据库之SQL笛卡尔积
1.笛卡尔积定义 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join).所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表 ...
- Xeon Phi 编程备忘
▶ 闲鱼的 Xeon Phi 3120A 配办公室的新 Xeon 服务器,记录一下环境安装过程. ● 原本尝试搭 Ubuntu 服务器,参考[https://software.intel.com/en ...
- https Configure a Spring Boot app for HTTPS on Amazon AWS.
参考: https://geocolumbus.github.io/HTTPS-ELB-AWS-Spring-Boot/ 1. 在服务器端配置 证书 域名 映射 2. 导入依赖: <depe ...
- Linux批量查询替换字符串
Linux 批量查询替换文本文件中的字符串: 1.批量查找某个目下文件的包含的内容,例如: # grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. # ...
- 未能同步 iPhone XXX,因为这台电脑不再被授权使用在此iPhone上购买的项目。
打包生成的ipa文件,安装到手机上,p12和ppf证书都正确,手机的udid也正确.用itunes安装到手机报错. 未能同步 iPhone XXX,因为这台电脑不再被授权使用在此iPhone上购买的项 ...
- 程序员必看:给你一份详细的Spring Boot知识清单
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架.或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用.因而Spring Boot应用本质上就是一个基于Sp ...