[英]Unable to invalidate timer
我試圖在我的應用程序中使用計時器,在該應用程序中我想在viewWillAppear上啟動計時器,並希望在viewWillDisappear方法中停止計時器。 我做了以下編碼:
在.h中:@屬性(非原子的,強的)NSTimer * timer;
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:FALSE];
if(!_timer){
_timer = [NSTimer scheduledTimerWithTimeInterval: 5.0
target: self
selector:@selector(reloadInboxMessages)
userInfo: nil repeats:YES];
}
}
-(void)reloadInboxMessages {
NSLog(@"reloadInboxMessages");
[tblvwMessage reloadData];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:FALSE];
NSLog(@"viewWillDisappear");
if([_timer isValid]){
[_timer invalidate];
_timer = nil;
}
}
我認為這將是簡單的任務要做,但我不知道為什么它不工作。 有什么問題
嘗試self.timer = [NSTimercheduledTimerWithTimeInterval ...
有三種創建計時器的方法:
使用ScheduledTimerWithTimeInterval:invocation:repeats:或ScheduledTimerWithTimeInterval:target:selector:userInfo:repeats:類方法來創建計時器,並將其安排在默認模式下的當前運行循環中。
使用timerWithTimeInterval:調用:重復:或timerWithTimeInterval:目標:選擇器:USERINFO:重復:類方法沒有調度它在運行循環來創建計時器對象。 (創建計時器后,必須通過調用相應的NSRunLoop對象的addTimer:forMode:方法將計時器手動添加到運行循環中。)
分配計時器並使用initWithFireDate:interval:target:selector:userInfo:repeats:方法對其進行初始化。 (創建計時器后,必須通過調用相應的NSRunLoop對象的addTimer:forMode:方法將計時器手動添加到運行循環中。)
編輯:
您正在使用的方法已將其從以下方法添加到mainLoop中-使用第二種方法創建計時器並保留手動添加。
您必須在其上安裝了定時器線程發送無效消息。 如果從另一個線程發送此消息,則與計時器關聯的輸入源可能不會從其運行循環中刪除,這可能會阻止線程正常退出。
編輯:
無效即在回調傳遞的計時器,但不會viewWillDisappear方法中出現:。 因此,它並不完全適用於這樣的場景:
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.