前几天去国美在线面试,就遇到了上面的问题,当时是笔试,只写出来了第一种方法,现在整理了一下。

   //1.performSelector方法;在当前线程中执行的方法,使用默认模式,并延迟执行@selector方法。
    [self performSelector:@selector(runDelayMethod) withObject:nil afterDelay:2.0];
    //取消之前注册的performSelector:withObject:afterDelay:这个方法
    //[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(runAfterDelay) object:nil];
    
    //2.GCD方法;延迟执行block(块)中代码
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self runDelayMethod];
    });
    
    //3.NSTimer方法;创建一个NSTimer对象,使用默认的模式,延迟执行@selector方法
    [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(runDelayMethod) userInfo:nil repeats:NO];

runDelayMethod方法就是要延迟执行的方法

- (void)runDelayMethod
{
    NSLog(@"延迟两秒执行");
}

 

posted on 2015-04-07 17:10  Stephen Li  阅读(1606)  评论(0编辑  收藏  举报