2012-03-22 45 views
0

我希望能夠暫停/繼續我的NSTimer,發現this below answer的NSTimer暫停/恢復泄漏

NSDate *pauseStart, *previousFireDate; 

-(void) pauseTimer:(NSTimer *)timer { 

    pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain]; 

    previousFireDate = [[timer fireDate] retain]; 

    [timer setFireDate:[NSDate distantFuture]]; 
} 

-(void) resumeTimer:(NSTimer *)timer { 

    float pauseTime = -1*[pauseStart timeIntervalSinceNow]; 

    [timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 

    [pauseStart release]; 

    [previousFireDate release]; 
} 

工作正常。然而,當測試我的應用程序的泄漏,它告訴我,我在這裏得到一個泄漏:

[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 

任何人都可以幫助我嗎?您可以從我使用的代碼中看到,pauseStart和previousFireDate保留在pauseTime方法中,並在resumeTimer方法中發佈。

非常感謝

山姆

回答

0

你不應該叫init(或任何在同系列的其它方法)的對象上兩次。 (Here's why)。將該行更改爲:

[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 

你會沒事的。

+0

我很高興你編輯了你的答案 - 幹得好先生!像夢一樣工作 – 2012-03-22 10:49:41