2015-06-04 35 views
2

無論是否在​​中的任何視圖控制器上,無論是在background還是在killed中,我都需要每15秒調用一次方法,我需要隨時致電。不考慮應用程序狀態,調用延遲15秒的方法

我知道我可以使用NSTimer

NSTimer* myTimer = [NSTimer scheduledTimerWithTimeInterval: 15.0 target: self 
           selector: @selector(callAfterFifteenSeconds:) userInfo: nil repeats: YES]; 

做延遲的任務,但我想知道在哪裏執行它,以便它能夠滿足我的條件。我想我可以在App Delegate中使用它,但我需要一個指導來正確實現它。

+1

如果應用程序被殺死,您如何期望您的代碼調用方法? – pteofil

+0

我也不知道,但多數民衆贊成我的要求履行的要求。那就是我在SO – iYoung

+0

上尋求幫助,當應用程序被殺死時,它不會做任何事情,所以在這種情況下定時器/其他任何東西都不起作用。 –

回答

1

在應用程序中調用它委託類是正確的地方,但它不適用於以下情況。

  • 如果您的應用程序在背後死亡,它將無法正常工作。
  • 它不會處於後臺模式。 OS將在一段時間後停止該進程。
-1
 [NSThread sleepForTimeInterval:4.0f]; 
    dispatch_async(dispatch_get_main_queue(), 
        ^{ 
       //write you code if you want fire any method after 4 sec//   

        } 
        ); 
+0

你能解釋我的答案嗎? – iYoung

+1

請解釋使用此NSThread&塊的好處。 – iYoung

+0

如果你想在一段時間後調用任何方法,那麼這個方法用於實現在主隊列上一段時間後調用這些方法... –

1

- 如果應用程序被殺死了,你不能做任何事情。

- 當應用程序處於後臺時,操作系統可能會在某個時間間隔(我相信它是15秒)後終止該進程。

雖然您可以註冊位置更改,而應用程序在後臺。在這種情況下,您的應用將繼續接收位置更新(例如Google地圖)。

-(void)callAfterFifteenSeconds { 

    //1.) do your work 


    //2.) If required, you can also choose to skip the next scheduling. 
    BOOL shouldSchedule = YES; 

    if (shouldSchedule) { 
     //3.) 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      // 
      [self callAfterFifteenSeconds]; 

     }); 
    } 

}