NSTimer timerWithTimeInterval:不工作

在我的项目中实现它之前,我用计时器创build了一个testing应用程序。 这是我第一次使用计时器。 但问题是,当我使用[NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ];实现了计时器[NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ]; ,它不工作。 这是我的代码,接口:

 @interface uialertViewController : UIViewController { NSTimer *timer; } -(void)displayAlert; -(void)hideandview; @end 

执行:

 @implementation uialertViewController - (void)viewDidLoad { [self displayAlert]; [super viewDidLoad]; } -(void)displayAlert{ timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(hideandview) userInfo:nil repeats:NO]; alert = [[UIAlertView alloc] initWithTitle:@"testing" message:@"hi hi hi" delegate:nil cancelButtonTitle:@"continue" otherButtonTitles:nil]; [alert show]; [alert release]; alert = nil; } -(void)hideandview{ NSLog(@"triggered"); [alert dismissWithClickedButtonIndex:0 animated:YES]; [alert release]; [self displayAlert]; } @end 

然后我改变了 [NSTimer timerWithTimeInterval: target: selector: userInfo: repeats: ]; [NSTimer scheduledTimerWithTimeInterval: target: selector:userInfo: repeats: ]; ,它正在工作timerWithTimeInterval:什么问题timerWithTimeInterval: ? 我第一次执行什么任务? 提前致谢。

scheduledTimerWithTimeInterval:invocation:repeats:scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:创build定时器,自动添加到NSRunLoop ,这意味着你不必自己添加它们。 把他们添加到NSRunLoop是什么导致他们开火。

timerWithTimeInterval:invocation:repeats:timerWithTimeInterval:target:selector:userInfo:repeats: ,你必须添加计时器到一个运行循环手动,代码是这样的:

 [[NSRunLoop mainRunLoop] addTimer:repeatingTimer forMode:NSDefaultRunLoopMode]; 

在这里的其他答案表明,你需要自己打电话。 你不这样做 – 只要定时器被放在运行循环中就会被调用。

也有人可能想要确保在主线上添加计时器。

 assert(Thread.isMainThread) let timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(YourSelector), userInfo: nil, repeats: true) 

两者之间的区别在于timerWithTimeInterval方法返回尚未被触发的NSTimer对象。 要启动计时器,您必须使用[timer fire]; 另一方面, scheduledTimerWithTimeInterval返回一个已经被触发的NSTimer

所以,在你的第一个实现中,你只是缺less[timer fire];