IOS中延时执行的几种方式的比较和汇总
2015-10-27 10:39
477 查看
本文列举了四种延时执行某函数的方法及其一些区别。假如延时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;取消执行。
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]; });
此方式在可以在参数中选择执行的线程。
是一种非阻塞的执行方式,
没有找到取消执行的方法。
原文链接:/article/2685612.html
(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;取消执行。
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]; });
此方式在可以在参数中选择执行的线程。
是一种非阻塞的执行方式,
没有找到取消执行的方法。
原文链接:/article/2685612.html
相关文章推荐
- ios 设置摇一摇震动
- ios 图片保存到 相册
- Can't find the new iOS Developer Program License Agreement I need to sign
- IOS中输入框被软键盘遮挡的解决办法
- 虚拟机进入BIOS设置软驱禁用
- ios6如何处理内存,分别为前警告后
- ios 系统控件显示中文
- iOS 谓词的使用
- iOS开发 基本绘图/Quartz 2D/Core Image
- 百度地图SDK for iOS v2.9.0 类参考
- 7款免费的IOS9图形用户界面和模板
- 实例解析iOS开发中系统音效以及自定义音效的应用
- iOS开发---Xcode7升级之后插件无法使用或者不小心点击Skipbundle的解决办法
- IOS--导航栏的使用方法
- 近距离感应 传感器 iOS开发
- 简单谈谈MVC模式
- iOS 9 新特性之实现 3D Touch 就是 So easy -- OC版
- 7款免费的IOS9图形用户界面和模板
- 程序之间的跳转 iOS开发
- 【译】iOS Xcode部署配置