簡體   English   中英

無法使計時器無效

[英]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方法中出現:。 因此,它並不完全適用於這樣的場景:

  • (空隙)的OnTimer:(的NSTimer *)pTimer {[pTimer無效]; }

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM