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; } ...
随机推荐
- 牛客网暑期ACM多校训练营(第七场)J题(Sudoku Subrectangles)题解
一.题意 给定一个高度为$n$,宽度为$m$的字母矩形(有大写和小写字母,共$52$种),问里面有多少个子矩形是“数独矩形”.数独矩形是指,该矩形内每一行内元素都不相同,每一列内元素也不相同. 二.思 ...
- ffmpeg同步
1:ffmpeg解码流程 拆包,构建队列,解码,同步,显示 //计算视频Frame的显示时间//获取ptspts = 0;//decodec video frameavcodec_decode_vid ...
- css sprite实例
css sprite直译过来就是CSS精灵.通常被解释为“CSS图像拼合”或“CSS贴图定位”.本文章向码农们介绍css sprite使用方法和基本使用实例,需要的码农可以参考一下. 一.什么是css ...
- guess_age
age_shanshan = 18count = 3num = 0while num < count: age = int(input("age:")) if age == ...
- RHEL6.x查看网卡槽位对应设备文件及路径
先查看网卡mac地址,由于我的服务器做了mac地址绑定,所以会有相同的hwaddr地址,请忽略. [root@node-0a0a05d3- net]# ifconfig eth0 | grep HWa ...
- OpenACC 简单的直方图
▶ 简单的直方图,强调原子操作的使用 ● 代码 #include <stdio.h> #include <stdlib.h> #include <openacc.h> ...
- python读取excel,数字都是浮点型,日期格式是数字的解决办法
excel文件内容: 读取excel: # coding=utf-8 import xlrd import sys reload(sys) sys.setdefaultencoding('utf-8' ...
- JAVA Spring JdbcTemplate ( 以 SQLSERVER 为例 ) 的简单使用
< 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...
- HTML5 Canvas ( 线段的绘制 ) beginPath, moveTo, strokeStyle, stroke
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- egret 精简游戏项目
新建一个游戏项目,我们可以删除resource文件夹下除了default.thm.json和default.res.json文件,一旦删除,当新建皮肤exml文件时会报错 还可以删除src文件夹里除了 ...