ios的延迟执行的方法

1.最直接的方法performSelector:withObject:afterDelay:

这种方法的缺点:每次要为延时写一个方法

2.使用类别,用BOLCK执行

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

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

1 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*1), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
2                         dispatch_async(dispatch_get_main_queue(), ^{
3                             [self alertLabelWithStr:@"计划同步成功"];//执行的方法
4                         });
5                     });

dispatch_time的第二个参数是过多少纳秒执行

4.可能是不太好的方法,用animation的completion参数

1     [UIView animateWithDuration:0.0 delay:5.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
2     } completion:^(BOOL finished) {
3         //do stuff here
4     }];

5.使用NSOperationQueue,在应用程序的下一个主循环执行:

1     [[NSOperationQueue mainQueue] addOperationWithBlock:aBlock]; 

这个和调用performSelector: with afterDelay of 0.0f等价

时间: 2024-10-01 04:07:52

ios的延迟执行的方法的相关文章

iOS开发延迟执行一个方法的方法

在实际的开发中,有时候需要延迟一段时间执行某个方法或者某段代码,总结两种延迟执行某段代码的方式: 1. [self performSelector: withObject: afterDelay:]; 延迟执行(SEL)里面的方法,是oc中的一个方法.第一个参数是要执行的方法,第二个参数是执行的方法的参数,可以有一个参数也可以为nil.第三个参数是多长时间后执行该方法,该方法是单线程的. 2. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (in

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

之前开发过程中经常会有需求会使用 NSObject中的"performSelector:withObject:afterDelay:"做方法延迟执行的处理, 但是 还没有什么地方需要实现 取消 这个延迟执行方法"cancelPreviousPerformRequestsWithTarget:".(具体可参见系统库文件 NSOject里面两个方法的声明). 但是 我们应该知道在什么条件下,合理使用 延迟 与 取消延迟. 延迟 和 取消延迟 应该 在同一个 事件处理循环

[ios]ios的延迟执行方法

1.最直接的方法performSelector:withObject:afterDelay: 这种方法的缺点:每次要为延时写一个方法 2.使用类别,用BOLCK执行 [代码]c#/cpp/oc代码: 01 @implementation NSObject (PerformBlockAfterDelay) 02   03 - (void)performBlock:(void (^)(void))block 04           afterDelay:(NSTimeInterval)delay

IOS中延迟执行的几种方法

前几天去国美在线面试,就遇到了上面的问题,当时是笔试,只写出来了第一种方法,现在整理了一下. //1.performSelector方法:在当前线程中执行的方法,使用默认模式,并延迟执行@selector方法. [self performSelector:@selector(runDelayMethod) withObject:nil afterDelay:2.0]; //取消之前注册的performSelector:withObject:afterDelay:这个方法 //[NSObject

iOS 代码延迟执行

1. [NSTread sleepForTimeInterval:0.8f] 这个方法 实际效果 好比打断点 等你再恢复断点执行 2.  [self performSelector:@selector(fun:) withObject:nil afterDelay:0.8f]; 这个 就适合UI层级的 异步方式  延迟执行  比较好  还有延迟执行的方法 "fun" 按需求来 当前笔记待补充

iOS中延迟执行的几种方式

- 1.使用NSThread类 [NSThread sleepForTimeInterval:3]; 该方法会阻塞当前线程 -2.使用NSObject中的方法 [self performSelector:@selector(download:) withObject:sender afterDelay:timeDelay]; 该方法不会阻塞当前线程,在当前线程执行selector -3.使用gcd 在主线程或由全局队列上的线程异步延迟回调block dispatch_queue_t queue

Unity里延迟执行的方法

在Unity中,延时执行一段代码或者一个方法或者几个方法的情况非常普遍. 一般会用到Invoke和InvokeRepeating方法.顾名思义,第一个是执行一次,第二个是重复执行. 看下定义: void Invoke(string methodName, float time); 第一个参数是方法名(注意是字符串形式),并不是更方便的委托.第二个是延时多少秒.只执行一次. void InvokeRepeating(string methodName, float time, float repe

ios 屏幕截图- 延迟执行

- (IBAction)clip {    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{        // 1.捕捉        UIImage *newImage = [UIImage captureWithView:self.view];                // 2.写文件        NSData *

nodejs延迟执行

setImmediate方法和process.nextTick()方法都是延迟执行的方法,先来看下面一个例子,来区别两者的区别. process.nextTick(function(args){ console.log("nextTick延迟执行!"); }); setImmediate(function(args){ console.log("setImmediate延迟执行!"); }); console.log("正常执行!"); //正常