延迟调用-05-GCD

 1 //
 2 //  ViewController.m
 3 //  05-GCD延迟调用
 4 //
 5 //  Created by mac on 16/4/21.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10
11 @interface ViewController ()
12
13 @end
14
15 @implementation ViewController
16
17 - (void)viewDidLoad {
18     [super viewDidLoad];
19
20 }
21
22 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
23
24     [self delay3];
25 }
26
27 /**
28  *  非延迟调用
29  */
30 - (void)delayThread1 {
31
32     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
33     dispatch_after(DISPATCH_TIME_NOW, queue, ^{
34
35         NSLog(@"delay === %@", [NSThread currentThread]);
36     });
37 }
38 /**
39  *  延迟调用,且开启多线程
40  */
41 - (void)delayThread2 {
42
43     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
44     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{
45
46         NSLog(@"delayThread2===%@", [NSThread currentThread]);
47     });
48 }
49
50 /**
51  *  一下三个方法实现了延迟调用,未开启多线程,在主线程中执行
52  */
53 - (void)delay1 {
54
55     [NSThread sleepForTimeInterval:3];
56     NSLog(@"delay1=%@", [NSThread currentThread]);
57 }
58 - (void)delay2 {
59
60     [self performSelector:@selector(download:) withObject:@"http://333.jpg" afterDelay:3];
61 }
62 - (void)delay3 {
63
64     dispatch_queue_t queue = dispatch_get_main_queue();
65     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{
66
67         NSLog(@"delay3=%@", [NSThread currentThread]);
68
69     });
70
71     /*GCD :与上面的等价
72      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
73
74         NSLog(@"delay3=%@", [NSThread currentThread]);
75
76     });*/
77
78
79
80      NSLog(@"delay====%@", [NSThread currentThread]);
81 }
82
83 - (void)download:(NSString *)url {
84
85     NSLog(@"delay2=%@", [NSThread currentThread]);
86 }
87
88
89 @end
时间: 2024-11-05 18:38:21

延迟调用-05-GCD的相关文章

【Unity3D】Invoke,InvokeRepeating ,Coroutine 延迟调用,周期性调用

Invoke和InvokeRepeating方法,可以实现延迟调用,和周期调用 第一个是执行一次,第二个是重复执行 void Invoke(string methodName, float time); 第一个参数是方法名(注意是字符串形式),并不是更方便的委托.第二个是延时多少秒.只执行一次. void InvokeRepeating(string methodName, float time, float repeatRate); InvokeRepeating第二个参数是延时多少秒后开始,

延迟调用或多次调用第三方的Web API服务

当我们调用第三方的Web API服务的时候,不一定每次都是成功的.这时候,我们可能会再多尝试几次,也有可能延迟一段时间再去尝试调用服务. Task的静态方法Delay允许我们延迟执行某个Task,此方法可以让我们做到延迟一段时间再去调用服务:多尝试几次调用如何实现呢?可以用循环遍历. 在"使用HttpClient对ASP.NET Web API服务实现增删改查"中,创建了一个ASP.NET Web API项目,本篇沿用此Web API服务. 在ASP.NET Web API项目的同一个

xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView.frame=(CGRect){{50,50},{230,230}}; /** 创建图片 */ UIImage * image=[[UIImage alloc]init]; /** 获取图片 */ image=[UIImage imageNamed:@"图片名称"]; /** 把图片给容器

用NodeJs实现延迟调用,规避定时任务的闭包问题

很多人在用NodeJs的setTimeout(callback, delay[, arg][, ...])编写定时任务时,习惯上直接操作callback外部的对象object(闭包的特点).这样做有一个隐患,就是当callback真正执行的时候,外部对象object可能已经被销毁了(比如执行了自定义的销毁方法),导致对object进行的处理结果出现了很大的偏差,程序甚至有可能出现异常而退出. 解决这个问题其实很简单,我们只需要在callback回调中重新通过某种方式获取该对象,检查一下该对象是否

Python_Tips[2] -&gt; 函数延迟调用与变量值

函数延迟调用与变量值 在一个循环中定义了函数f但是并未对其进行调用,在循环结束后调用,此时i值为3故最终3个函数输出均为9. 1 import dis 2 3 def count(): 4 fs = [] 5 for i in range(1,4): 6 def f(): 7 return i*i 8 fs.append(f) 9 return fs 10 11 def run(): 12 f1, f2, f3 = count() 13 # When the function called, t

Go中defer的延迟调用

// code_006_defer_usage project main.go package main import ( "fmt" ) func test(x int) { fmt.Println(100 / x) } func main() { //关键字 defer ?于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行. //注意,defer语句只能出现在函数或方法的内部. fmt.Println("this is a test") defer fmt

第七章、函数基础之函数的调用05

目录 第七章.函数基础之函数的调用05 一.什么是函数调用? 二.函数调用的三种形式 第七章.函数基础之函数的调用05 一.什么是函数调用? 函数名()就会调用函数,会执行函数体代码,直到碰到return或者完函数体所有代码 运行完函数体内代码,如果没有return就会返回none def foo(): pass print(foo()) 二.函数调用的三种形式 def max_self(x,y): if x>y: return x else: return y \# 1. max_self(1

17_defer(延迟调用)关键字的使用

1.defer是延迟调用关键字,只能在函数内部使用 2.总是在main函数结束前调用(和init用法相对) 3.如果有多个defer 遵循先进后出的原则 4.和匿名函数同时使用时,如果匿名函数带有参数,则先把参数传进去,最后调用 例如: package main import "fmt" func Test() { defer fmt.Println("111111") //最后执行 defer fmt.Println("222222") //其

函数的异步、延迟调用

延迟调用: CALL FUNCTION 'ZFM_UPDATE_QALS'  IN UPDATE TASK    "STARTING NEW TASK l_taskname         TABLES           it_prueflos = lt_prueflos. DATA: lw_prueflos TYPE zsqm_prueflos . *  WAIT UP TO 3 SECONDS.   LOOP AT it_prueflos INTO lw_prueflos.     UPD