2011-05-02 5 views
0

아래 줄을 사용할 때 startTimer & stopTimer 시간 스탬프의 차이점이 나타납니다. 하지만 내 문제는, 내가 release/dealloc startTimer & stopTimer 그래서 나는 그들을 다시 사용할 수있는 신선한 가치가 될 수없는 것입니다 .. 아무도 도울 수 있습니까?다시 사용할 포인터 값을 해제 하시겠습니까?

기본적으로 동일한보기에서 타이머를 시작하고 타이머를 중지 한 다음 시간차를 인쇄합니다. 그런 다음 새로운 가치로 다시 전체 과정을 시작하겠습니다.

startTimer = [[NSDate alloc]init]; 
stopTimer = [[NSDate alloc]init]; 
newTime = [NSString stringWithFormat:@"Time : %f", [stopTimer timeIntervalSinceDate:startTimer]]; 

나는 사용하여 시도 : (하지만 그들은 작동하지 않는 것)

[startTimer dealloc]; 
[stopTimer dealloc]; 

[startTimer release]; 
[stopTimer release]; 

startTimer = nil; 
stopTimer = nil; 

이를 사용하여 응용 프로그램은 내가 이것들을 사용하는 두 번째 시간을 충돌합니다.

답변

0

- [release 메시지 호출 후에이 경우] 이전에, 객체가 해제 얻을 후 자신의 refcount는이 0

이 떨어지는 경우에 그것은라고 필요한 경우 객체를 다시 할당/초기화합니다. 직접 dealloc를 호출 측면에서

, 당신은 문제의 객체가 여전히 다른 곳에서 사용 할 수 있으므로, (당신이 만드는 모든 할당 해제의 방법의 끝에서 [super dealloc];를 호출 할 때부터 떨어져을)이 작업을 수행해서는 안됩니다. (이것은 분명히 제공 한 예에서는 가능하지 않지만 관찰하는 데 좋은 경험적 방법입니다.)

Memory Management Programming Guide을 자세히 읽어 볼 것을 권해 드리며 향후 배당금을 지급 할 예정입니다.

+1

수정 ... 호출 할 때 dealloc을 호출하면 안됩니다. [슈퍼 dealloc] :-) –

+0

고마워요 - 나는 이것을 지금 시험해 볼 것입니다! – buzzkip

+0

@ Jason 좋은 지적 - 답변을 업데이트하겠습니다. :-) –

0

dealloc을 호출 할 필요가 없습니다. 당신은 단순히 문제의 개체에 대한 관심/소유권을 포기 release를 호출해야

+0

좋은 답변 - 시도해 보도록하겠습니다. resetUI 메소드에서이 방출자를 만듭니다. – buzzkip

+1

더 구체적으로 말하자면, 자신이 'dealloc'을 호출해서는 안됩니다. 단 하나의 예외가 있습니다 : 당신은 자신의'dealloc' 오버라이드에서'[super dealloc]'을 호출해야합니다. – Caleb

+0

물론 일반적으로 그렇습니다. 그러나 dealloc에 ​​대한 호출은 필요하지 않습니다. dealloc은 런타임에 의해 자동으로 호출되기 때문에 refcount가 0으로 내려갑니다. – macbirdie

0

할당 및 초기화 타이머 후에 릴리스를 호출 할 수 있습니다.이 경우 타이머를 새로 고칩니다.

[startTimer release]; 
[stopTimer release]; 
startTimer = [[NSDate alloc]init]; 
stopTimer = [[NSDate alloc]init]; 

나는 이것이 당신을 도울 것이라고 생각합니다!

관련 문제