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];