2012-06-27 49 views
0

在Instrumens中測試的應用程序內存泄漏獲取使用多次pauseTimer和resumeTimer的多個泄漏。泄漏的對象NSDate:ResumeTimer&PauseTimer

定義在M檔

NSDate *pauseStart, *previousFireDate; 

-(void)pauseTimer{ 
pauseStart = [[NSDate dateWithTimeIntervalSinceNow:0] retain]; 
previousFireDate = [[timer fireDate] retain]; 
[timer setFireDate:[NSDate distantFuture]]; 
} 

    -(void)resumeTimer{ 
float pauseTime = -1*[pauseStart timeIntervalSinceNow]; 
//[timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 
[timer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 
} 

如何修復pauseTimer和resumeTimer此內存泄漏。用戶可以多次使用PauseTimer和resumeTimer。

欣賞幫助。

謝謝。

回答

1

每次啓動pauseTimer方法時,都會保留pauseStartpreviousFireDate的值。您需要在保留新值之前釋放先前的值,以避免內存泄漏。

最簡單的解決方案是爲這些值創建兩個保留屬性(可能位於類擴展名中),因此當您設置新值時,會爲您處理該版本。 (請不要忘記釋放dealloc方法中的值以避免泄漏。)

+0

我已經發布了pauseStart和previousFireDate在ALLOC方法現在越來越泄漏的UIApplication的sendAction:到:來源:forEvent現在該怎麼解決這個問題一個 – user1452248

+0

嗯......不知道沒有看到您的修改代碼。 –

+0

- (void)dealloc { [audioPlayer release]; [pauseStart release]; [previousFireDate release]; [super dealloc]; } – user1452248

0

您可以使用NSTimer的isValid屬性和invalidate方法。

-(void)pauseTimer 
{ 
    if (!timer.isValid) 
     return; 

    // remember your fire date 

    [timer invalidate]; 
} 

-(void)resumeTimer 
{ 
    if (timer.isValid) 
     return; 

    // schedule your timer to new date 
    // release old date 
}