2011-10-19 3 views
2

다음과 같은 이유로 메모리 누수가 발생하거나 더 좋은 것으로 변경 될 수 있습니까? countDownTimer = nilNSTimer 메모리 누출?

-(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는 만료되거나 무효화 될 때 보유 수를 자동으로 감소시킵니다. 당신이 그것을 보유하고있는 ivar에 할당하지 않는 한 그것을 nil과 동일하게 설정할 필요는 없다. (귀하의 경우에는 self.countDownTimer를 사용하여 타이머를 지정해야한다는 의미입니다.

1

를 제거되는으로 나는 countDownTimer는 바르 가정? NSTimer은 살아있는 동안 목표를 유지하므로 [countDownTimer invalidate] 전화가 self에 대한 마지막 참조를 해제하고 -pauseTimer 메소드 중간에 self의 할당을 해제하는 것처럼 들립니다. 따라서 self에 대한 참조는 심지어 암시 적 참조 (예 : ivars 액세스)가 충돌하거나 최소한 예기치 않게 동작합니다.

누가 -pauseTimer으로 전화를 걸습니까? 아마도 그들은 당신의 물건에 대한 강한 참고가 있어야합니다.