1.最直接的方法performSelector:withObject:afterDelay:
这种方法的缺点:每次要为延时写一个方法
 
2.使用类别,用BOLCK执行

[代码]c#/cpp/oc代码:

01 @implementation NSObject (PerformBlockAfterDelay)
02  
03 - (void)performBlock:(void (^)(void))block
04           afterDelay:(NSTimeInterval)delay
05 {
06     block = [[block copy] autorelease];
07     [self performSelector:@selector(fireBlockAfterDelay:)
08                withObject:block
09                afterDelay:delay];
10 }
11  
12 - (void)fireBlockAfterDelay:(void (^)(void))block {
13     block();
14 }
15  
16 @end
 
3.使用GCD

[代码]c#/cpp/oc代码:

1 void RunBlockAfterDelay(NSTimeInterval delay, void (^block)(void))
2 {
3     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
4       dispatch_get_current_queue(), block);
5 }

poolo:注意 图中的dispatch_getcurrent_queue() 方法在ios6已经被kill了

现在用dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0)
第一个参数是优先级有,第二个参数为0或nil
如果要要对界面操作则使用dispatch_get_main_queue();
参考:http://www.cnblogs.com/guwandong/archive/2012/08/08/2626211.html
 
4.可能是不太好的方法,用animation的completion参数

[代码]c#/cpp/oc代码:

1 [UIView animateWithDuration:0.0 delay:5.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
2 } completion:^(BOOL finished) {
3     //do stuff here
4 }];
 
5.使用NSOperationQueue,在应用程序的下一个主循环执行:

[代码]c#/cpp/oc代码:

1 [[NSOperationQueue mainQueue] addOperationWithBlock:aBlock];
 
这个和调用performSelector: with afterDelay of 0.0f等价

[ios]ios的延迟执行方法的更多相关文章

  1. ios开发之-- 延迟执行方法

    延迟执行的几种方法,分享一下. 1.performSelector(NSObject)方法  2.NSTimer方法  3.GCD方法  4.sleep(NSThread)方法 1.performSe ...

  2. iOS 设置 延迟执行 与 取消延迟执行 方法 以及对 run loop 初步认识

    之前开发过程中经常会有需求会使用 NSObject中的"performSelector:withObject:afterDelay:"做方法延迟执行的处理, 但是 还没有什么地方需 ...

  3. iOS定时器、延迟执行

    1.通用方式(并不是实时调用并且会卡顿): // 一般用于更新一些非界面上的数据 [NSTimer scheduledTimerWithTimeInterval:时间间隔 target:self se ...

  4. IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget

    本文非本人撰写     @interface NSObject (NSDelayedPerforming) - (void)performSelector:(SEL)aSelector withObj ...

  5. iOS延迟执行方法

    swift 4.0中dispatch_async,dispatch_after的使用 2018年03月28日 16:15:44 xiao_yuly 阅读数:3576 版权声明:本文为博主原创文章,未经 ...

  6. IOS 设置定时器,执行方法

    //设置定时器(1秒后跳到一下题) [self performSelector:@selector(nextQuestion) withObject:nil afterDelay:1.0];

  7. jquery 延迟执行方法

    setTimeout方法使用时需注意: //以下两种方式都行: setTimeout(function () { test(); }, ); //或者 setTimeout(); function t ...

  8. 浅谈iOS开发中方法延迟执行的几种方式

    Method1. performSelector方法 Method2. NSTimer定时器 Method3. NSThread线程的sleep Method4. GCD 公用延迟执行方法 - (vo ...

  9. js获取时间,循环执行任务,延迟执行任务

    一.获取时间 核心方法创建一个时间对象:new Date() 时间对象相关操作 时间对象.函数名 函数名 功能 getYear() 获取四位数的年份 getMonth() 获取2位数的月数, 这个是从 ...

随机推荐

  1. ZOJ 1586 QS Network (最小生成树)

    QS Network Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Sta ...

  2. python15-day1课堂随机

    print("Hello world") #变量定义:一个在内存储存数据的容器#意义:为什么有变量,因为它保存程序执行的中间结果或状态以供后面的低吗进行调用 day1 = 200+ ...

  3. javaShop的一些总结

    主要参考 pdf 找到对应的文件吧,具体怎么制作一个挂件 还没有理解里面的思路,就没有研究了,改一个商城项目遇到了,也只有慢慢解决 加油! CSDN下载地址:http://download.csdn. ...

  4. 自定义input file 属性

    <label class="input"><input title="浏览文件" type="file" />浏览… ...

  5. AngularJS尝鲜一

    第一个小例子,体验一下: <!DOCTYPE html> <html> <head> <title>Index</title> </h ...

  6. Python Tool Visual Studio简单使用

    由于一直在做.NET的开发,一直用的IDE是VS系列的,所以想用VS也能开发Python,刚好微软提供一个插件PTVS(Python Tool Visual Studio)专门应用于Python开发的 ...

  7. easyUi学习备忘

    1.获取datagrid的自身相关的属性方式: jQuery("#grid").datagrid("options").height jQuery(" ...

  8. MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互

    在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...

  9. [javascript|基本概念|Number]学习笔记

    Number类型的值:整数/浮点数值 整数 十进制  e.g.: var intNum = 50; 八进制  (严格模式下无效,解析错误)字面值首位必须是0,之后的数字序列为0-7  e.g.: va ...

  10. The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.问题解决

    didFailLoadWithError(): Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loa ...