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