2013-11-01 2 views
46

콘텐츠가 사용자에게 표시되는 앱이 있습니다. 이제 사용자가 실제로 콘텐츠를 보는 데 걸리는 시간 (초)을 확인하려고합니다. 그래서 내 헤더 파일에, 가끔 다른 오류,두 날짜의 차이 (초) ios

endTime = [NSDate date]; 
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime]; 
NSLog(@"Seconds --------> %f", secs); 

그러나 내 viewWillDisappear 내 viewWillAppear 그런

startTime = [NSDate date]; 

NSDate *startTime; 
NSDate *endTime; 

그런 다음 응용 프로그램 충돌을 선언했습니다 . 때로는 메모리 누수가되는 경우가 있습니다. NSTimeInterval에 문제가있는 경우도 있고, 두 번째로 콘텐츠로 돌아간 후에 충돌하는 경우도 있습니다.

해결 방법에 대한 의견이 있으십니까?

+1

오류 로그를 게시하십시오. – Jano

+0

위와 같이 코드를 편집했습니다. 때때로 얻을 수있는 로그는 다음과 같습니다. - [__ NSCFType timeIntervalSinceReferenceDate] : 인식 할 수없는 선택기가 인스턴스 0xbbf7c10에 전송되었습니다. –

+0

ARC를 사용하고 있습니까? – medvedNick

답변

13

는 ARC를 사용하지 않기 때문에, 당신은 -viewWillDisappear를 호출하기 전에 할당이 해제되어 있도록, startTime을 유지하지 않는

startTime = [NSDate date];

물품.

startTime = [[NSDate date] retain];

은 또한, 나는 ARC를 사용하는 것이 좋습니다보십시오. 그것없이 메모리 관리보다 훨씬 적은 오류가 발생합니다.

11

시작 날짜에 retain이있는 속성을 선언해야합니다. 시차를 계산하기 전에 날짜가 공개됩니다.

그래서
@property (nonatomic, retain) NSDate *startDate 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self setStartDate: [NSDate date]]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    NSLog(@"Seconds --------> %f",[[NSDate date] timeIntervalSinceDate: self.startDate]); 
} 

정리하는 것을 잊지 마세요 선언합니다.

- (void)dealloc 
{ 
    [self.startDate release]; 
    [super dealloc]; 
}