3 回答
TA贡献1880条经验 获得超4个赞
NSTimer
,
定时器 使用计时器
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(targetMethod:) userInfo:nil repeats:NO];
targetMethod:
self
NSTimer
NSTimer
invalidate
NSTimer
[myTimer invalidate];myTimer = nil;
nil
nil
NSTimer
因为Run循环从内存管理的角度来维护计时器。 通常情况下,在调度计时器之后,不需要保留对它的引用..由于计时器在将其方法指定为选择器时作为参数传递, 在适当的情况下,可以在该方法中使重复计时器失效。..然而,在许多情况下,您还想要使计时器无效的选项-甚至在计时器开始之前。 在这种情况下,您确实需要保持对计时器的引用,以便在适当的时候发送一条无效消息。..如果您创建了一个非计划计时器(请参阅“非计划计时器”),那么您必须维护对计时器的强烈引用(在引用计数环境中,您保留它),以便在使用它之前不会将它释放。
TA贡献1810条经验 获得超4个赞
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];
-(void)onTick:(NSTimer *)timer { //do smth}
TA贡献1802条经验 获得超5个赞
NSTimer *timer; timer = [NSTimer scheduledTimerWithTimeInterval: 0.5 target: self selector: @selector(handleTimer:) userInfo: nil repeats: YES];
- 3 回答
- 0 关注
- 479 浏览
添加回答
举报