博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS中延时执行的几种方式的比较
阅读量:7127 次
发布时间:2019-06-28

本文共 870 字,大约阅读时间需要 2 分钟。

本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的方法。

- (void)delayMethod { NSLog(@"execute"); }

1.performSelector方法

[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f];

此方式要求必须在主线程中执行,否则无效。

是一种非阻塞的执行方式,
暂时未找到取消执行的方法。

2.定时器:NSTimer

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(delayMethod) userInfo:nil repeats:NO];

此方式要求必须在主线程中执行,否则无效。

是一种非阻塞的执行方式,
可以通过NSTimer类的- (void)invalidate;取消执行。

3. sleep方式

[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];

此方式在主线程和子线程中均可执行。

是一种阻塞的执行方式,建方放到子线程中,以免卡住界面
没有找到取消执行的方法。

4.GCD方式

double delayInSeconds = 1.0; 
 __block ViewController* bself = self; 
 dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
 [bself delayMethod]; });

此方式在可以在参数中选择执行的线程。

是一种非阻塞的执行方式,
没有找到取消执行的方法。

转载地址:http://cpael.baihongyu.com/

你可能感兴趣的文章
一个强大的批处理文件
查看>>
基于 Swoole 的微信扫码登录
查看>>
Largest Rectangle in Histogram
查看>>
聊聊pg jdbc的queryTimeout及next方法
查看>>
golang 依赖管理
查看>>
Java常用工具类整理
查看>>
FED之必备技能
查看>>
高性能磁盘 I/O 开发学习笔记 -- 硬件原理篇
查看>>
一个还算优雅的 react 图片组件
查看>>
JSON应知应会
查看>>
一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)
查看>>
设计模式之代理模式
查看>>
客服系统从Require.js到Webpack
查看>>
React 16 中的异常处理
查看>>
独家解析Javascript原型继承
查看>>
springboot集成mqtt
查看>>
重拾css(3)——学习css的思路
查看>>
SegmentFault 社区访谈 | 有位公子在奇舞
查看>>
jQuery源码分析之jQuery的定义
查看>>
一些经典面试题分析(上)
查看>>