首页 > 其他 > 详细

关于NSTimer的几种构建方式

时间:2015-12-20 17:31:28      阅读:199      评论:0      收藏:0      [点我收藏+]

 - (IBAction)startButtonAction1:(id)sender {

   // 使用scheduledTimer类方法构建出的Timer,会以NSDefaultRunLoopMode模式放入RunLoop中,也就是说计时器即刻开始工作了

    // 这是selector的用法

    if (!timer_) {

        timer_ = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];

    }

}

 

- (IBAction)startButtonAction2:(id)sender {

    // 使用scheduledTimer类方法构建出的Timer,会以NSDefaultRunLoopMode模式放入RunLoop中,也就是说计时器即刻开始工作了

    // 这是invocation的用法

    if (!timer_) {

        timer_ = [NSTimer scheduledTimerWithTimeInterval:1.0 invocation:[self timerActionInvocation] repeats:YES];

    }

}

 

- (IBAction)startButtonAction3:(id)sender {

    if (!timer_) {

        // 使用timer类方法构建出的Timer,不会放入RunLoop中,也就是说计时器在构建出来后并没有立即工作

        // 当将其放入RunLoop中后,计时器开始工作

        // 这是selector的用法

        timer_ = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];

        [[NSRunLoop mainRunLoop] addTimer:timer_ forMode:NSRunLoopCommonModes];

    }

}

 

- (IBAction)startButtonAction4:(id)sender {

    // 使用timer类方法构建出的Timer,不会放入RunLoop中,也就是说计时器在构建出来后并没有立即工作

    // 当将其放入RunLoop中后,计时器开始工作

    // 这是invocation的用法

    if (!timer_) {

        timer_ = [NSTimer timerWithTimeInterval:1.0 invocation:[self timerActionInvocation] repeats:YES];

        [[NSRunLoop mainRunLoop] addTimer:timer_ forMode:NSRunLoopCommonModes];

    }

}

 

- (IBAction)startButtonAction5:(id)sender {

    // 使用实例初始化方法构建出的Timer,不会放入RunLoop中,也就是说计时器在构建出来后并没有立即工作

    // 当将其放入RunLoop中后,计时器开始工作

    // 使用实例方法可以指定计时器开始工作的时间

    if (!timer_) {

        timer_ = [[[NSTimer alloc] initWithFireDate:[NSDate distantPast] interval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES] autorelease];

        [[NSRunLoop mainRunLoop] addTimer:timer_ forMode:NSRunLoopCommonModes];

    }

}

 

- (IBAction)stopButtonAction:(id)sender {

    // invalidate会停止计时器,并将其从RunLoop中移除

    if (timer_) {

        [timer_ invalidate];

        timer_ = nil;

    }

}

 

- (IBAction)pauseButtonAction:(id)sender {

    // 如果timer能够接收fire消息,则isValid属性值为YES,否则为NO

    // 将fireDate设置为未来,则表示timer不接受fire消息

    if (timer_ && timer_.isValid) {

        timer_.fireDate = [NSDate distantFuture];

    }

}

 

- (IBAction)continueButtonAction:(id)sender {

    // 如果timer能够接收fire消息,则isValid属性值为YES,否则为NO

    // 将fireDate设置为过去,则表示timer能接收fire消息

    if (timer_ && timer_.isValid) {

        timer_.fireDate = [NSDate distantPast];

    }

}

 

- (IBAction)fireButtonAction:(id)sender {

    // timer接收到fire消息则会触发一次对应的处理

    if (timer_ && timer_.isValid) {

        [timer_ fire];

    }

}

 

#pragma mark Misc

 

- (NSString *)currentTimeString {

    NSDate *date = [NSDate date];

    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];

    formatter.dateFormat = @"HH:mm:ss";

    

    return [formatter stringFromDate:date];

}

 

- (NSInvocation *)timerActionInvocation {

    SEL selector = @selector(timerAction:);

    NSMethodSignature *signature = [self methodSignatureForSelector:selector];

    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];

    invocation.target = self;

    invocation.selector = selector;

    

    return invocation;

}

关于NSTimer的几种构建方式

原文:http://www.cnblogs.com/tang910103/p/5061258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!