猿问

如何使用NSTimer?

如何使用NSTimer?

如何使用NSTimer?有人能给我一步的指示吗?



慕勒3428872
浏览 485回答 3
3回答

慕村225694

首先,我想提请您注意Cocoa/CF文档(这始终是一个伟大的第一端口)。Apple文档在每篇参考文章的顶部都有一个叫做“Companion Guides”的部分,其中列出了文档主题的指南(如果有的话)。例如,用NSTimer, 文献列出两个配套指南:Cocoa的定时器编程主题线程编程指南对于您的情况,Timer编程主题的文章可能是最有用的,而线程主题是相关的,但不是最直接与所记录的类相关的。如果您查看Timer编程主题文章,它分为两部分:定时器使用计时器对于采用这种格式的文章,通常会概述类及其用途,然后介绍一些示例代码多么,怎样若要使用它,请在本例中的“使用计时器”部分中使用。有关于“创建和调度计时器”、“停止计时器”和“内存管理”的部分。从本文中,可以创建一个计划好的、不重复的计时器,如下所示:[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实例已被解除分配,它将引发异常)。还请注意本文末尾关于内存管理的要点:因为Run循环从内存管理的角度来维护计时器。通常情况下,在调度计时器之后,不需要保留对它的引用..由于计时器在将其方法指定为选择器时作为参数传递,在适当的情况下,可以在该方法中使重复计时器失效。..然而,在许多情况下,您还想要使计时器无效的选项-甚至在计时器开始之前。在这种情况下,您确实需要保持对计时器的引用,以便在适当的时候发送一条无效消息。..如果您创建了一个非计划计时器(请参阅“非计划计时器”),那么您必须维护对计时器的强烈引用(在引用计数环境中,您保留它),以便在使用它之前不会将它释放。

蝴蝶不菲

有几种使用计时器的方法:1) 计划计时器&使用选择器NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 2.0                       target: self                       selector:@selector(onTick:)                       userInfo: nil repeats:NO];如果将重复设置为“否”,则计时器将在运行选择器之前等待2秒,然后停止运行;如果重复:是的,计时器将立即启动,并将重复调用选择器每2秒;若要停止计时器,请调用计时器的-无效方法:[t无效];另外,您可以使用以下简单语句,而不是使用不重复的计时器,而是在指定的间隔之后调用选择器:[self performSelector:@selector(onTick:) withObject:nil afterDelay:2.0];这将具有与上面的示例代码相同的效果;但是如果您想每隔第九次调用选择器,则使用带有重复的定时器:是的;2) 自定时器NSDate *d = [NSDate dateWithTimeIntervalSinceNow: 60.0];NSTimer *t = [[NSTimer alloc] initWithFireDate: d                               interval: 1                               target: self                               selector:@selector(onTick:)                               userInfo:nil repeats:YES];NSRunLoop *runner = [NSRunLoop currentRunLoop];                               [runner addTimer:t forMode: NSDefaultRunLoopMode];[t release];这将创建一个定时器,该定时器将在您指定的自定义日期(在本例中为一分钟后)启动,并且每隔一秒重复一次。3) 计划外计时器&使用调用NSMethodSignature *sgn = [self methodSignatureForSelector:@selector(onTick:)];NSInvocation *inv = [NSInvocation invocationWithMethodSignature:  sgn];[inv setTarget: self];[inv setSelector:@selector(onTick:)];NSTimer *t = [NSTimer timerWithTimeInterval: 1.0                       invocation:inv                        repeats:YES];在此之后,您可以在需要时手动启动计时器,如下所示:NSRunLoop *runner = [NSRunLoop currentRunLoop];[runner addTimer: t forMode: NSDefaultRunLoopMode];作为注释,onTick:Method如下所示:-(void)onTick:(NSTimer *)timer {    //do smth}

慕后森

就像这样:NSTimer *timer;     timer = [NSTimer scheduledTimerWithTimeInterval: 0.5                      target: self                      selector: @selector(handleTimer:)                      userInfo: nil                      repeats: YES];
随时随地看视频慕课网APP

相关分类

iOS
我要回答