没问题。下面是 “Objective-C计时器NSTimer学习笔记” 的完整攻略:
一、NSTimer概述
NSTimer 是 Foundation 框架提供的一个类,用来实现定时器的功能。使用 NSTimer 可以在程序中实现类似闹铃、计时器等功能。
二、NSTimer使用方法
2.1 创建对象
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
这是 NSTimer 中常用的创建方式,该方式可以通过scheduledTimerWithTimeInterval方法快速创建一个计时器对象,其中:
- NSTimeInterval 单位为秒,代表间隔的时间;
- target 是计时器对象的持有者,一般为当前视图控制器或者当前类本身的实例;
- selector 代表当计时器到达规定时间间隔的时候需要执行的方法;
- userInfo 可以传递对象参数,可以为nil;
- repeats 是否重复执行,一般设为 YES。
2.2 启动计时器
[timer fire];
可以通过 fire 方法单独启动计时器,不过该方法执行后计时器不会重复执行,只会执行一次。
2.3 停止计时器
[timer invalidate];
可以通过 invalidate 方法停止计时器的执行。
2.4 selector的写法
- (void)timerAction {
NSLog(@"timer fire");
}
通过将计时器的实现方法写入到一个 selector 方法中,就可以实现对计时器事件的处理。
三、NSTimer的使用场景
NSTimer 适用于一些需要定时执行的场景,例如每隔一段时间更新 UI、定时器闹钟、录制视频时的录制时间等。
四、两个示例
4.1 iOS 中的倒计时
iOS 开发中,倒计时是一个比较常见的功能,可以用 NSTimer 来实现。
NSTimeInterval remainTime = 60.0;
@property (nonatomic, strong) NSTimer *countdownTimer;
// 开启计时器
self.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countdown) userInfo:nil repeats:YES];
// 倒计时方法
- (void)countdown {
if (self.remainTime > 0) {
self.remainTime --;
// 更新 UI
} else {
[self.countdownTimer invalidate];
self.countdownTimer = nil;
}
}
4.2 后台运行定位服务
后台定位服务是指应用在后台仍然持续获取用户的位置信息,该功能在疫情防控、出行导航等方面有着广泛的应用场景。在 iOS13 以后,如果应用在后台运行,需要进行特殊的权限申请才能够开启后台位置服务。
@property (nonatomic, strong) NSTimer *locationTimer;
@property (nonatomic, assign) NSInteger locationCount;
// 开启计时器
- (void)startLocationTimer {
self.locationCount = 0;
self.locationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(location) userInfo:nil repeats:YES];
}
// 定时器方法
- (void)location {
self.locationCount ++;
if (self.locationCount == 12) {
[self stopLocationTimer];
[self.locationManager stopUpdatingLocation];
} else {
[self.locationManager startUpdatingLocation];
}
}
// 停止定时器
- (void)stopLocationTimer {
[self.locationTimer invalidate];
self.locationTimer = nil;
}
此处给出了后台运行定位服务的示例代码,通过 NSTimer 控制一定时间间隔,开启定位服务,获取用户位置信息。在超出指定时间后,应用会停止获取位置信息并结束计时器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Objective-C计时器NSTimer学习笔记 - Python技术站