iOS NSTimer 启动

在iOS开发中,NSTimer是一种常用的定时器,它可以用来执行一些周期性的任务或者在一定延迟后执行某个操作。在本文中,我们将介绍如何使用NSTimer启动定时器,并提供了一些代码示例来帮助你更好地理解和应用NSTimer。

1. NSTimer简介

NSTimer是Foundation框架中的一个类,它可以用来创建定时器对象。NSTimer提供了一些方法来启动和停止定时器,并可以设置定时器触发的时间间隔和执行的方法。

2. NSTimer启动方法

NSTimer提供了两种启动定时器的方法:

方法一:scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

这是NSTimer类的类方法,它可以创建一个已经启动的定时器对象。这个方法的参数包括:

  • timeInterval:时间间隔,单位为秒,表示定时器每隔多长时间触发一次。
  • target:定时器触发时调用的方法所属的对象。
  • selector:定时器触发时调用的方法。
  • userInfo:传递给定时器触发方法的附加信息,可以为nil。
  • repeats:是否重复触发定时器,设置为YES表示重复触发,设置为NO表示只触发一次。

下面是一个使用scheduledTimerWithTimeInterval方法启动定时器的示例代码:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self
                                                selector:@selector(timerFired:)
                                                userInfo:nil
                                                 repeats:YES];

方法二:initWithFireDate:interval:target:selector:userInfo:repeats:

这是NSTimer类的初始化方法,通过这个方法创建的定时器对象需要手动启动。这个方法的参数包括:

  • fireDate:定时器第一次触发的时间。
  • interval:时间间隔,单位为秒,表示定时器每隔多长时间触发一次。
  • target:定时器触发时调用的方法所属的对象。
  • selector:定时器触发时调用的方法。
  • userInfo:传递给定时器触发方法的附加信息,可以为nil。
  • repeats:是否重复触发定时器,设置为YES表示重复触发,设置为NO表示只触发一次。

下面是一个使用initWithFireDate方法手动启动定时器的示例代码:

NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0]; // 2秒后触发
NSTimeInterval interval = 1.0; // 每隔1秒触发一次

NSTimer *timer = [[NSTimer alloc] initWithFireDate:fireDate
                                          interval:interval
                                            target:self
                                          selector:@selector(timerFired:)
                                          userInfo:nil
                                           repeats:YES];

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:timer forMode:NSDefaultRunLoopMode];
[runLoop run];

3. NSTimer的停止方法

NSTimer提供了一个invalidate方法来停止定时器,当你不再需要定时器时,应该调用这个方法来释放定时器对象。下面是一个停止定时器的示例代码:

[timer invalidate];
timer = nil;

4. 示例应用

现在我们来看一个实际的例子,假设我们需要每隔1秒更新界面上的一个计数器。首先,在视图控制器中添加一个标签用于显示计数器的值,并在视图控制器的头文件中声明一个NSTimer类型的属性:

@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, assign) NSInteger counter;
@property (nonatomic, weak) UILabel *counterLabel;

然后,在视图加载完成后,我们创建一个定时器对象并启动它:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
    [self.view addSubview:label];
    self.counterLabel = label;
    
    self.counter = 0;
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self