美文网首页
ios中延时执行延时(睡眠)的几种方法

ios中延时执行延时(睡眠)的几种方法

作者: 迷失的信徒 | 来源:发表于2019-12-02 20:30 被阅读0次
    • 最简洁的方法
    sleep(5);
    

    该方法阻塞的是当前线程
    sleep(0)可能不会被执行,而sleep(1)会被执行。这里引自sleep(1)和sleep(0)d区别

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

    • 比较直接的方法
    /**
     *  延迟执行
     *
     *  @param aSelector  方法名称
     *  @param anArgument  要传递的参数,如果无参数,就设为nil
     *  @param delay  延迟的时间
     */
    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
    
    

    下面两个方法都是类方法,不能用实例对象去调用,只能用 NSObject。

    /**
     *  取消延迟执行的某一方法
     *
     *  @param aTarget  一般填self
     *  @param aSelector  延迟执行的方法
     *  @param anArgument  设置延迟执行时填写的参数(必须和上面performSelector方法中的参数一样)
     */
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
    
    
    /**
     *  取消延迟执行的所有方法
     *
     *  @param aTarget  一般填self
     */
    + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
    
    
    • 用NSTread
    [NSThread sleepForTimeInterval:5];
    

    这中方式在主线程和子线程中均可执行,是一种阻塞式的执行方式,所以在这里建议放到子线程中执行,以防止界面卡住,暂时没有找到取消执行的方法。

    • 用GCD
    NSLog(@"开始。。。。");
    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){
                
                NSLog(@"结束。。。。");
            });
    

    此方式是可以在参数中选择执行的线程,是一种非阻塞的执行方式。

    • NSTimer
    延时执行
    + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
    
    取消延时执行
    - (void)invalidate;
    

    注该方法是一种阻塞执行方法,建议放在子线程中执行,否则会卡住界面。但也有例外如:启动APP进入欢迎界面一般就需要沉睡几秒才进入主界面。

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

    但这中方式不是很好,不是很建议使用。

    相关文章

      网友评论

          本文标题:ios中延时执行延时(睡眠)的几种方法

          本文链接:https://www.haomeiwen.com/subject/chyxgctx.html