2011-10-19 24 views
2

下面是否會導致內存泄漏,或者是否可以更改爲更好?隨着countDownTimer = nil被刪除NSTimer內存泄漏?

-(void)viewDidLoad{ 

countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(loadNewTime:) userInfo:nil repeats:YES]; 
} 

    -(void)pauseTimer{ 

     NSLog(@"Fired"); 
     [countDownTimer invalidate]; 
     //countDownTimer = nil <------ Causes crash when run 
    } 


    -(void)resumeTimer{ 

     countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(loadNewTime:) userInfo:nil repeats:YES]; 
    } 

回答

1

NSTimer在保留計數到期或失效時自動遞減保留計數。除非您已將其分配給保留的伊娃,否則無需將其設爲等於零。 (在你的情況下意味着你​​還需要使用self.countDownTimer來分配定時器

1

我認爲countDownTimer是伊娃? NSTimer s在他們還活着的時候保留了他們的目標,所以聽起來好像您打電話給[countDownTimer invalidate]會釋放最後一個引用到self,並導致self在您的-pauseTimer方法的中間釋放。因此,任何對self的引用,甚至隱式引用(例如訪問ivars)都會崩潰,或者至少會出現意外行爲。

誰在打電話-pauseTimer?也許他們應該對你的對象有強烈的參照。