2009-10-02 2 views
2

나는 자정까지 카운트 다운하는 타이머가있는 프로젝트를 가지고있다. 나는 그대로 두어야한다. 매초 자정까지 시간을 계산해야한다. (NSTimer 메서드는 1 초마다 호출된다.)iPhone dev - NSTimer 정확도를 다시 계산하지 않고 시간을 계산 하시겠습니까?

NSDate *now = [[NSDate alloc] init]; 
NSDateComponents *dateComponents = [[self gregorian] components: 
        (NSHourCalendarUnit | 
        NSMinuteCalendarUnit | 
        NSSecondCalendarUnit) fromDate:now]; 
[now release]; 
NSUInteger hour = 23 - [dateComponents hour]; 
NSUInteger min = 59 - [dateComponents minute]; 
NSUInteger sec = 59 - [dateComponents second]; 

NSString *time = [[NSString alloc] initWithFormat:@"%02d:%02d:%02d", 
        hour, min, sec]; 
[[self lblCountDown] setText: 
[time stringByReplacingOccurrencesOfString:@"1" withString:@" 1"]]; 
[time release]; 

는 나 그냥 그 첫 번째 시간을 계산해야하고 다른 모든 시간은 통화 당 1 초 동기화 그 이후 일초마다 빼기? 나는 이것이 1 초보다 오래 걸릴 것이라고 걱정하지 않는다. 그러나 결과가 다른 방향으로 동일하다면 최적화를하지 않을 이유가 없다. 어쨌든, 그렇게해야 하는가? 그리고 왜?

감사합니다.

답변

2

"최적화 할 이유가 없습니다"라는 말은 위험한 것입니다. 이유 최적화가 필요하지 않은 이유가 필요합니다! 이 코드는 실행에 많은 시간을 들이지 않는 상당히 합리적인 작은 싹둑입니다.

정확도에 관해서는 정확한 시간을 유지하는 유일한 방법은 시스템이 자동으로 수행하도록하는 것입니다. "지금"시간을 가져 오는 것이 그 일을하는 방법입니다. 자신의 손에 넣으면 시계가 실수로 표류하고 아마도 눈치 채기에 충분할 것입니다.

최적화에 관해서는 프로파일 링, 프로파일 링, 빠르면 빠름, 고치면 고칠 것, 더 재미있는 것으로 넘어가십시오!

+0

나는 두 가지 방법을 사용하고 동일하면 로그를 남겼다. – mk12

+0

합리적인 것 같습니다. 마이크로 콘트롤러 나 다른 것에서 드리프트를 볼 수는 있지만 이와 같은 빠른 장치에서는 볼 수 없습니다. –

2

시기 상 조기 최적화는 항상 배드입니다. 일년 후 디버그 할 수없는 코드는 오늘 작성하지 마십시오. 다음을 수행 할 때까지 절대로 최적화 작업을 수행하지 마십시오.

  1. 작동하는 응용 프로그램이 있습니다.
  2. 실제 응용 프로그램의 성능이 실제와 다릅니다.
  3. 실제 부츠 넥을 찾으려면 계측을 완료해야합니다.
  4. 최상의 알고리즘을 사용하고 계실 것입니다.
  5. 코드 선명도를 희생하지 않고 최적화하는 방법을 알아 냈습니다.

이렇게 말하면서 매 초마다 현재 시간을 확인하면 성능이 저하 될 수 없습니다. 그래서 분명히 최적화 적용에 대한 요구 사항 2를 통과하지 못했을 것입니다.

관련 문제