小编典典

如何使用 NSTimer?

all

我该如何使用NSTimer?谁能给我一步一步的指示?


阅读 86

收藏
2022-04-04

共1个答案

小编典典

首先,我想提请您注意 Cocoa/CF 文档(它始终是一个很好的第一站)。Apple
文档在每篇参考文章的顶部都有一个名为“配套指南”的部分,其中列出了正在记录的主题的指南(如果存在)。例如,NSTimer文档列出了两个配套指南:

对于您的情况,Timer Programming Topics 文章可能是最有用的,而 threading
主题与所记录的类相关但不是最直接相关的。如果您查看 Timer Programming Topics 文章,它分为两部分:

  • 计时器
  • 使用定时器

对于采用这种格式的文章,通常会概述类及其用途,然后是一些关于 如何
使用它的示例代码,在本例中位于“使用计时器”部分。有关于“创建和调度计时器”、“停止计时器”和“内存管理”的部分。从文章中,创建一个计划的、非重复的计时器可以这样完成:

[NSTimer scheduledTimerWithTimeInterval:2.0
    target:self
    selector:@selector(targetMethod:)
    userInfo:nil
    repeats:NO];

这将创建一个计时器,该计时器在 2.0 秒后触发,并使用一个参数调用targetMethod:self该参数是指向NSTimer实例的指针。

如果您想更详细地了解该方法,您可以参考文档以获取更多信息,但也有围绕代码的解释。

如果您想停止一个重复的计时器,(或在它触发之前停止一个非重复计时器),那么您需要保留一个指向NSTimer已创建实例的指针;通常这需要是一个实例变量,以便您可以在另一种方法中引用它。invalidate然后,您可以调用NSTimer实例:

[myTimer invalidate];
myTimer = nil;

删除实例变量也是一种很好的做法nil(例如,如果多次调用使计时器无效的方法并且尚未将实例变量设置为nil并且NSTimer实例已被释放,它将引发异常)。

还要注意文章底部关于内存管理的一点:

因为运行循环维护计时器,所以从内存管理的角度来看, 通常不需要在您安排计时器之后保留对计时器的引用
。由于当您将计时器的方法指定为选择器时,计时器作为参数传递,因此 您可以在该方法中适当时使重复计时器无效
。然而,在许多情况下,您还需要使计时器无效的选项——也许甚至在它开始之前。
在这种情况下,您确实需要保留对计时器的引用,以便您可以在适当的时候向其发送无效消息.
如果您创建了一个未调度的计时器(请参阅“nscheduled
Timers”),那么您必须维护对计时器的强引用(在引用计数的环境中,您保留它),以便在使用它之前不会释放它。

2022-04-04