如何清除 NSTimer 内存?
how to clear NSTimer memory?
我正在使用 NSTimer
在录制时在标签上显示秒数。
我在点击录制按钮时启动计时器,并在点击停止按钮时停止计时器。
当我点击播放按钮时,计时器没有重新启动。
-(void)startTimer
{
playTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerController)
userInfo:nil
repeats:YES];
}
- (NSString*)getTimeStr : (int) secondsElapsed
{
seconds = secondsElapsed % 60;
int minutes = secondsElapsed / 60;
int hours = secondsElapsed/3600;
return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}
- (void)timerController{
seconds++;
[[self timeLabel] setText:[self getTimeStr:(seconds)]];
}
- (IBAction)recordTapped:(id)sender {
[self startTimer];
}
- (IBAction)stopTapped:(id)sender {
[playTimer invalidate];
playTimer=nil;
_timeLabel.text=@"00:00:00";
}
- (IBAction)playTapped:(id)sender {
[self startTimer];
}
- (void)resetTimer {
if(playTimer) {
[playTimer invalidate];
playTimer = nil;
}
}
您应该在每次 startTimer
之前再次调用 resetTimer
方法。
如评论中所述,存在两个错误:
错误 #1
您应该始终在重新启动计时器之前将变量 seconds
重置为 0(可能在 startTimer
的第一行重置它)
错误 #2
变量seconds
被getTimeStr
函数的第一行覆盖。您应该将 seconds
替换为 int sec
,对于 return
行,将 seconds
替换为 sec
。
我正在使用 NSTimer
在录制时在标签上显示秒数。
我在点击录制按钮时启动计时器,并在点击停止按钮时停止计时器。
当我点击播放按钮时,计时器没有重新启动。
-(void)startTimer
{
playTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerController)
userInfo:nil
repeats:YES];
}
- (NSString*)getTimeStr : (int) secondsElapsed
{
seconds = secondsElapsed % 60;
int minutes = secondsElapsed / 60;
int hours = secondsElapsed/3600;
return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}
- (void)timerController{
seconds++;
[[self timeLabel] setText:[self getTimeStr:(seconds)]];
}
- (IBAction)recordTapped:(id)sender {
[self startTimer];
}
- (IBAction)stopTapped:(id)sender {
[playTimer invalidate];
playTimer=nil;
_timeLabel.text=@"00:00:00";
}
- (IBAction)playTapped:(id)sender {
[self startTimer];
}
- (void)resetTimer {
if(playTimer) {
[playTimer invalidate];
playTimer = nil;
}
}
您应该在每次 startTimer
之前再次调用 resetTimer
方法。
如评论中所述,存在两个错误:
错误 #1
您应该始终在重新启动计时器之前将变量 seconds
重置为 0(可能在 startTimer
的第一行重置它)
错误 #2
变量seconds
被getTimeStr
函数的第一行覆盖。您应该将 seconds
替换为 int sec
,对于 return
行,将 seconds
替换为 sec
。