2秒执行 ios_ios 按秒执行代码 - CSDN
精华内容
参与话题
  • iOS- 延迟1秒执行一个函数

    千次阅读 2016-09-06 20:50:07
    假如延时1时间执行下面的方法。 - (void)delayMethod { NSLog(@”execute”); } 1.performSelector方法[self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 此方式要求必须在主线...

    本文列举了四种延时执行某函数的方法及其一些区别。
    假如延时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;取消执行。

    1. 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]; });

    此方式在可以在参数中选择执行的线程。
    是一种非阻塞的执行方式,
    没有找到取消执行的方法。

    展开全文
  • iOS中延时执行(睡眠)的几种方法

    万次阅读 2015-02-16 17:17:05
    1. 最直接的方法: [self performSelector:@selector(deleyMethod) withObject:nil afterDelay:1.0]; 此方式要求必须在主线程中执行,否则无效。...2. 用 NSTread[NSThread sleepForTimeInterval:0.0

    1. 最直接的方法:

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

    此方式要求必须在主线程中执行,否则无效。是一种非阻塞的执行方式,暂时未找到取消执行的方法。

    缺点:每次要为延时写一个方法。

    2. 用 NSTread

    [NSThread sleepForTimeInterval:0.06];

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

    3.用GCD。

        double delayInSeconds = 2.0;  
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);  
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){  
            // code to be executed on the main queue after delay  
        });
    

    
    

    此方式在可以在参数中选择执行的线程。是一种非阻塞的执行方式,没有找到取消执行的方法。

    4.定时器:NSTimer

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

    此方式要求必须在主线程中执行,否则无效。是一种非阻塞的执行方式,可以通过NSTimer类的- (void)invalidate;取消执行。

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

    <span style="background-color: rgb(255, 255, 255);"><span style="color:#000000;">[[NSOperationQueue mainQueue] addOperationWithBlock:aBlock];</span></span>

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

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

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



    展开全文
  • ios中设置N执行一个函数

    万次阅读 2013-10-02 11:45:57
    设置N执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了。 5执行pushSecondController这个函数 [self performSelector:@selector...
    


    设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了。

    5秒后执行pushSecondController这个函数

    [self performSelector:@selector(pushSecondController) withObject:nil afterDelay:5.0f];

    比如:在第一个视图出现后5秒就跳转到第二个视图,代码如下:

    - (void) pushSecondController{ 
    SecondViewController *secondController = [[SecondViewController alloc] initWithNibName:nil bundle:NULL]; 
    [self.navigationController pushViewController:secondController animated:YES]; 
    } 
    - (void) viewDidAppear:(BOOL)paramAnimated{ 
    [super viewDidAppear:paramAnimated]; 
    [self performSelector:@selector(pushSecondController) withObject:nil afterDelay:5.0f]; 
    }

    5秒钟后又跳回第一个页面

    - (void) goBack{ 
    [self.navigationController popViewControllerAnimated:YES]; 
    }
    - (void) viewDidAppear:(BOOL)paramAnimated{ 
    [super viewDidAppear:paramAnimated]; 
    [self performSelector:@selector(goBack) withObject:nil afterDelay:5.0f]; 
    }
    

    展开全文
  • button的重复点击问题 简单的办法 利用enable属性来标记 1 - (IBAction)clickBtn1:...2 { 3 sender.enabled = NO; 4 doSomething 5 sender.enabled = YES; 6 } 或者定义一个属性标记 1 -


    button的重复点击问题



    简单的办法 利用enable属性来标记


    1 - (IBAction)clickBtn1:(UIbutton *)sender
    2 {
    3     sender.enabled = NO;
    4     doSomething
    5     sender.enabled = YES;
    6 }

    或者定义一个属性标记


    1 - (IBAction)clickBtn1:(UIbutton *)sender
    2 {
    3     if (doingSomeThing) return;
    4     doingSomeThing = YES;
    5     doSomething
    6     doingSomeThing = NO;
    7 }


    在time时间内不论调用多少次,只执行一次。


    利用runtime 实现


    首先给按钮条件一个属性 记录目标间隔时间

     

    复制代码
     1 @interface UIControl (MYButton)
     2 @property (nonatomic, assign) NSTimeInterval my_acceptEventInterval;   // 可以用这个给重复点击加间隔
     3 @end
     4 static const char *UIControl_acceptEventInterval = "UIControl_acceptEventInterval";
     5 - (NSTimeInterval)my_acceptEventInterval
     6 {
     7     return [objc_getAssociatedObject(self, UIControl_acceptEventInterval) doubleValue];
     8 }
     9 - (void)setMy_acceptEventInterval:(NSTimeInterval)my_acceptEventInterval
    10 {
    11     objc_setAssociatedObject(self, UIControl_acceptEventInterval, @(my_acceptEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    12 }
    复制代码

     

    //交换系统的方法
     
    复制代码
    1 @implementation UIControl (MYButton)
    2 + (void)load
    3 {
    4     Method a = class_getInstanceMethod(self, @selector(sendAction:to:forEvent:));
    5     Method b = class_getInstanceMethod(self, @selector(__my_sendAction:to:forEvent:));
    6     method_exchangeImplementations(a, b);
    7 }
    8 @end
    复制代码

     

    //定义自己的点击事件  

    复制代码
     1 - (void)__my_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event
     2 {
     3     if (self.my_ignoreEvent) return;
     4     if (self.my_acceptEventInterval > 0)
     5     {
     6         self.my_ignoreEvent = YES;
     7         [self performSelector:@selector(setMy_ignoreEvent:) withObject:@(NO) afterDelay:self.my_acceptEventInterval];
     8     }
     9     [self __my_sendAction:action to:target forEvent:event];
    10 }
    复制代码

     

    实际使用起来就是这个样子

    1  UIButton *tempBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    2     [tempBtn addTarget:self action:@selector(clickWithInterval:) forControlEvents:UIControlEventTouchUpInside];
    3     tempBtn.uxy_acceptEventInterval = 0.5;

    第三种方法  利用延迟调用


    - (void)addaction{

     

       nsobject cancelPerfromSelector....

       self performselector@(doSometing)... afterdeley:5..



    }

    - (void)doSomething{

      你真正做得事情。。。

    ...

    }


    这种,在5秒内,你重复点击不会生效。只有最后一次才会





    展开全文
  • 有时候有些操作是防止用户在一次响应结束中再响应下一个。但有些测试用户就要猛点,狂点。像这种恶意就要进行防止。 当然有些异步操作时,可以在调用前enable 掉。等CallBACK 后再enable起来。...
  • 关于iOS中延迟执行的几种方法

    千次阅读 2017-07-14 18:50:18
    1、方法一:使用dispatch_afterint64_t delayInSeconds = 10.0; // 延迟的时间 ... *@parameter 2,延时多久,此处为级,还有纳秒等。10ull * NSEC_PER_MSEC */ dispatch_time_t popTime = dispatch_time(DISPA
  • iOS 实现倒计时显示 时 分

    千次阅读 2018-05-19 09:40:04
    头部代码 #import "YQHomeViewController.h" @interface YQHomeViewController () //将sb中的label进行拖拽过来 @property (weak, nonatomic) IBOutlet UILabel *timeLbl; ...//创建定时器(因为下面两个...
  • 在上家公司做项目的时候,做了个60获取验证码的功能,当时做了个定时器,按钮触发定时器,逻辑来讲都是没问题的,但是实际操作的时候,恶意的在短... 时隔2月,我在新公司工作了,回头来看这个问题,为了解决这个问
  • - (void)performSelector:(SEL)aSelector withObject:(id)an...这个方法是单线程的,也就是说只有当前调用次方法的函数执行完毕后,selector方法才会被调用。 比如: - (void)changeText:(NSString *)st
  • 我是刚刚学习swift语言,求各位大大帮忙!不尽感谢!最简单的例子想要在for循环中每隔1输出,该如何改写如下代码? for i in "helloSwift"{ Print (String(i)) }
  • IOS微信浏览器返回事件popstate监听

    万次阅读 2018-09-09 15:10:27
    通过监听popstate事件,来判断是否点击返回按钮,比如从A页面跳转到B页面(监听popstate),然后再跳转到C页面,点击返回的按钮,测试成功,包括安卓版,但是问题来了,IOS版的微信,是会立即触法popstate事件,导致...
  • ios 重复执行方法

    千次阅读 2019-04-02 16:15:41
    一、NSTimer 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO];...比如设置成1.0,就代表1执行方法 ta...
  • 1、GCD的dispatch_asyn方法  dispatch_asyn(dispatch_get_main_queue, ^{  // do something  });  该方法用的最为普遍,AFNetworking和SDWebImage等很多开源库都采用这种方式, 如AFNetworking ...
  • IOS后台运行机制详解(一)

    万次阅读 2013-06-21 22:22:18
    一、IOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking bar does not contain "a list of all running apps". It contains...
  • iOS 几种定时器

    万次阅读 2014-02-28 15:00:56
    //第一种 每一秒执行一次(重复性)  double delayInSeconds = 1.0;  timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));  ...
  • 当进入一个页面的时候,想做一个轮询,怎么做到每隔30s就建立连接,访问接口数据。
  •  1.我们可以设置UIButton的enable属性,为NO,... 2.还可以利用两个方法达到同样的效果,下面为代码.  可以很好地控制,几秒钟之后按钮点击才能执行方法.  - (void)btnClick{  [[self class] cancelPrev
  • 参考:jQery ajax()请求的页面执行时间超过10时,在Safari中出错 使用WKWebView加载网页,该网址在其他任何浏览器均可加载出来,其中包括safari浏览器也是10s超时,来看debug截图 原因就在于, 后端给网页响应的...
  • 之前对定时器的使用有误区,所以特地研究了一下,这里也跟大家分享一下:开启定时器,关闭定时器,取消定时器
  • 本文列举了四种延时执行某函数的方法及其一些区别。假如延时1时间执行下面的方法。 - (void)delayMethod { NSLog(@"execute"); } 1.performSelector方法 [self performSelector:@select
1 2 3 4 5 ... 20
收藏数 33,609
精华内容 13,443
关键字:

2秒执行 ios