代码之家  ›  专栏  ›  技术社区  ›  jantimon

目标C相当于javascripts settimeout?

  •  25
  • jantimon  · 技术社区  · 15 年前

    在Cocoatouch Objective中,我想知道是在30秒后还是每隔30秒提出一次事件的解决方案。

    4 回复  |  直到 7 年前
        1
  •  32
  •   Stephen Darlington    15 年前

    有很多选择。

    最快使用的是 NSObject :

    - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
    

    (还有一些变化不大的。)

    如果你想要更多的控制或者能够说每30秒发送一次这个信息,你可能需要 NSTimer .

        2
  •  42
  •   Blago    10 年前

    performselector:家族有其局限性。以下是最接近的设置超时等效值:

    dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.5);
    dispatch_after(delay, dispatch_get_main_queue(), ^(void){
        // do work in the UI thread here
    });
    

    编辑: 几个项目提供了语法上的优势和取消执行的能力(ClearTimeout):

        3
  •  11
  •   Alex Reynolds    15 年前

    看看 NSTimer 班级:

    NSTimer *timer;
    ...
    timer = [[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(thisMethodGetsFiredOnceEveryThirtySeconds:) userInfo:nil repeats:YES] retain];
    [timer fire];
    

    在其他地方,您有处理事件的实际方法:

    - (void) thisMethodGetsFiredOnceEveryThirtySeconds:(id)sender {
       NSLog(@"fired!");
    }
    
        4
  •  3
  •   Jacksonkr    7 年前
    +[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]
    

    Documentation

    你也可以看看另一个 NSTimer 方法