2013-07-21 48 views
0

我想知道這主要是出於理論/性能方面,但如果我需要在UILabel中顯示當前日期/時間或者什麼東西,然後保持它的最新狀態(比如下降到最新),那麼最正確的方法是什麼?在iOS應用程序中顯示當前日期/時間並保持最新狀態的正確方法

我見過各種各樣的「時鐘」應用程序的例子,它們基本上只有一個遞歸方法,在調用之間延遲1秒鐘運行。另一種選擇是創建一個可重複的計時器並將其添加到運行循環中。也可能有其他多種方法來做到這一點。有沒有比其他方式更好的方法?

+0

iOS狀態欄中顯示的日期/時間不合理的原因是什麼? – Abizern

+0

這是,我真的只是出於好奇而問這個:) – chinabuffet

回答

1

遞歸方法不是一個好主意。

使用NSTimer的方法。在viewDidAppearinvalidate中創建重複定時器viewDidDisappear(以避免保留週期,也稱爲強參考週期)。例如,假設你有一個timer屬性:

@property (nonatomic, strong) NSTimer *timer; 

你會再安排與如下無效定時器:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    [self.timer invalidate]; 
    self.timer = nil; 
} 

- (void)handleTimer:(NSTimer *)timer 
{ 
    // update your label here 
} 

如果不釋放和/或invalidate計時器,它會保持對你的控制器的強有力的參考,你可以結束一個強大的參考週期。並且您無法在dealloc中解析此強參考週期(因爲dealloc在控制器沒有更強的參考之前不會被調用;重複NSTimer的存在尚未失效將阻止dealloc不會被調用),這就是我們爲什麼要這麼做的原因它在viewDidDisappear

+0

你能解釋一下這種方法如何避免保留週期嗎? – chinabuffet

+1

@chinabuffet查看擴展的答案。 – Rob

相關問題