第一种:

[UIView animateWithDuration:3 delay:3 options:1 animations:^{self.btn.transform = CGAffineTransformMakeTranslation(300, 400);} completion:^(BOOL finished) {NSLog(@"view animation结束");}];
//不会阻塞线程,animations  block中的代码对于是支持animation的代码,才会有延时效果,对于不支持animation的代码 则 不会有延时效果复制代码

第二种:

[NSThread sleepForTimeInterval:3];
//阻塞线程,浪费性能 ,一般不推荐用。此方式在主线程和子线程中均可执行。 建议放到子线程中,以免卡住界面,没有找到取消执行的方法。
[self delayMethod];
复制代码

第三种:最常用

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{});
//定制了延时执行的任务,不会阻塞线程,在主线程和子线程中都可以,效率较高(推荐使用)。此方式在可以在参数中选择执行的线程。 是一种非阻塞的执行方式, 没有找到取消执行的方法。
复制代码

第四种:

[self performSelector:@selector(test) withObject:nil afterDelay:3];
//此方式要求必须在主线程中执行,否则无效。 是一种非阻塞的执行方式.
[[self class] cancelPreviousPerformRequestsWithTarget:self];
//取消本类中执行的performSelector:方法
复制代码

第五种:定时器

1)NSTimer

[NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];
//此方式要求必须在主线程中执行,否则无效。 是一种非阻塞的执行方式, 可以通过NSTimer类的- (void)invalidate;取消执行。
复制代码

2)dispatch_source_t(比 NSTimer 更准的定时器),也可以在子线程中执行,非阻塞执行方式

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);//开始时间
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, 3.0 * NSEC_PER_SEC);//间隔时间
uint64_t interval = 2.0 * NSEC_PER_SEC;dispatch_source_set_timer(self.timer, start, interval, 0);//设置回调
dispatch_source_set_event_handler(self.timer, ^{[self delayMethod];dispatch_suspend(self.timer);
});//启动timer
dispatch_resume(self.timer);
复制代码

发现个不错的iOS进阶视频,感兴趣可看一看:观看地址

转载于:https://juejin.im/post/5d0256fe518825738151f799

OC中的几种延迟执行方式相关推荐

  1. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  2. 通读《C++ primer plus》— C++中的5种数据类型转换方式

    通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...

  3. 计算机网络中的时延有哪几部分,计算机网络中的四种延迟分别是什么?

    计算机网络中的四种延迟分别是:节点处理延迟 .排队延迟.发送延迟.传播延迟. 1.节点处理延迟 数据更改在一个服务器上完成与该更改出现在另一个服务器上之间所用的时间(例如在发布服务器上进行更改和该更改 ...

  4. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  5. PG中的几种数据类型转换方式

    PG中的几种数据类型转换方式 1.通过格式化函数进行转换 函数 返回类型 描述 示例 to_char(timestamp,text) text 把时间戳转换成字符串 to_char(current_t ...

  6. 计算机网络中什么叫总衰耗_计算机网络中的四种延迟分别是什么?

    展开全部 计算e69da5e887aa62616964757a686964616f31333431346365机网络中的四种延迟分别是:节点处理延迟 .排队延迟.发送延迟.传播延迟. 1.节点处理延迟 ...

  7. java中的json_JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  8. linux定时关机命令_Windows系统中的几种快捷关机方式,欢迎大家补充

    Windows操作系统的几种快捷关机方式 一直再鼓弄Linux系统的教程 最近也发一些windows系统在日常使用过程中一些常用的小技巧 欢迎指正和补充 1.Alt + F4 ALT + F4在win ...

  9. 警惕企业中的五种虚假执行力

    第一种虚假执行力:无条件服从--只强调员工"服从",不强调员工的智慧 很多人讲执行力,很喜欢强调员工的无条件服从.这种观念是OEM(代工生产)制造业时代的产物.实际上这是一种基于& ...

最新文章

  1. 总体设计和登陆服务器 [游戏服务器的设计思路 转]
  2. Linux下Chrome/Chromium窗口边框有白线
  3. 4行代码再现《黑客帝国》数字雨,在终端实现的那种
  4. 【翻译】Programming Ruby——正则表达式
  5. Java虚拟机9:Java类加载机制
  6. vue elementui 切换语言
  7. 【视觉盛宴三】不好意思,这些线材接口的横截面真的没见过
  8. DotNetCore Web应用程序中的Cookie管理
  9. GTK+图形化应用程序开发学习笔记(四)—容器、构件
  10. 【资源下载】SocketTool 下载 资源下载
  11. android 动画库
  12. linux下ant安装和使用教程,ant安装与简单应用
  13. 艺术签名软件 3.0 绿色版
  14. 微软OpenPai平台部署安装(kubernetes 大数据和深度学习平台安装部署)
  15. xman的思维导图快捷键_MindMaster 思维导图快捷键
  16. [译]OOSE第7章:Analysis 分析 7.3 The analysis model 分析模型 7.4 Summary
  17. 集合——Collections
  18. 两个向量组的秩相等说明什么_若两个向量组等价,它们的秩是否相等?
  19. ClickHouse and K8s
  20. 自监督学习和计算机视觉

热门文章

  1. 对C++中new的认识
  2. C++ WinForm Application Designer issue
  3. Leetcode 978. 最长湍流子数组
  4. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定...
  5. 微信小程序开发教程第七章:微信小程序编辑名片页面开发
  6. 数据库编程起别名的3中方式
  7. I had no sooner finished eating than went to toilet.
  8. 致远OA任意文件下载漏洞(CNVD-2020-62422)
  9. 小学二年几手工计算机的制作,小学二年级创意手工制作方法
  10. js深拷贝,浅拷贝的解析以及解决方案