IOS 中NSTimer定时器的使用
nstimer 是 iOS 开发中一个常用的工具,用于执行周期性的任务。它的工作原理是将自身添加到RunLoop(运行循环)中,然后按照设定的时间间隔触发指定的方法。在本文中,我们将深入探讨如何在 iOS 中使用 NSTimer,以及使用过程中需要注意的关键点。 **1. NSTimer 的基本使用** 创建一个 NSTimer 需要以下四个关键参数: - **timeInterval**: 这是定时器触发间隔的时间,以秒为单位。 - **target**: 定时器触发时执行的方法所在的对象。 - **selector**: 这是定时器触发时要执行的方法名。 - **userInfo**: 可选参数,可以传递数据给执行方法。 - **repeats**: 指定定时器是否重复执行。 例如,创建一个每秒执行一次的定时器,我们可以这样做: ```swift let timer = NSTimer(timeInterval: 1.0, target: self, selector: #selector(countDownTime), userInfo: nil, repeats: true) ``` **2. NSTimer 的内存管理** 由于 NSTimer 是基于 RunLoop 的,所以它的生命周期与 RunLoop 密切相关。为了正确释放资源,我们需要在不再使用定时器时调用 `invalidate` 方法,同时将定时器对象设为 `nil`。在 UIViewController 中,通常会在 `- (void)viewWillDisappear:(BOOL)animated` 方法中停止并释放定时器,而不是在 `- (void)dealloc` 中,因为 `-viewWillDisappear:` 会更早被调用,确保在页面消失时定时器已经停止。 ```swift - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [timer invalidate]; timer = nil; } ``` **3. 控制定时器的状态** - **开始/启动定时器**: 设置 `fireDate` 为 `[NSDate distantPast]` 可以立即启动定时器。 - **停止定时器**: 设置 `fireDate` 为 `[NSDate distantFuture]` 可以停止定时器。 - **继续定时器**: 如果定时器已经停止,可以再次调用 `setFireDate:` 方法并传入 `[NSDate date]` 来恢复定时器的运行。 **4. 示例:倒计时功能** 倒计时是 NSTimer 的典型应用场景。以下展示了三种不同的初始化方法: **方法1**:初始化后立即开始计时 ```swift if (self.timer == nil) { self.time = 10.0; NSNumber *number = @(self.time); self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:number repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } // 关闭方法 [self.timer invalidate]; self.timer = nil; ``` **方法2**:初始化后需要调用 `setFireDate:` 才开始计时 ```swift if (self.timer == nil) { self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:nil repeats:YES]; [self.timer setFireDate:[NSDate distantFuture]]; } self.time = 10.0; [self.timer setFireDate:[NSDate distantPast]]; // 关闭方法 [self.timer setFireDate:[NSDate distantFuture]]; ``` **方法3**:初始化后需要调用 `fire` 才开始计时 ```swift if (self.timer == nil) { self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; [self.timer fire]; } // 关闭方法 [self.timer invalidate]; self.timer = nil; ``` 以上就是 iOS 中使用 NSTimer 的基本操作和注意事项。正确理解和使用 NSTimer 可以帮助开发者实现各种定时功能,比如倒计时、动画效果、网络请求重试等。在实际项目中,一定要记住在适当的时候停止并释放定时器,避免内存泄漏。
- 粉丝: 6
- 资源: 904
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 小说网站-JAVA-基于springBoot“西贝”小说网站的设计与实现
- 游戏分享网站-JAVA-基于springBoot“腾达”游戏分享网站的设计与实现
- 学习交流-JAVA-基于springBoot“非学勿扰”学习交流平台设计与实现
- EDAfloorplanning
- 所有课程均提供 Python 复习部分.zip
- 所有算法均在 Python 3 中实现,是 hacktoberfest2020 的一个项目 - 没有针对 hacktoberfest 2021 的问题或 PR.zip
- OpenCV的用户手册资源.zip
- 用springmvc实现的校园选课管理系统
- 我的所有 Python 代码都存储在这个文件夹中 .zip
- 以下是关于毕业设计项目开发的详细资源.docx