コンテンツがユーザーに表示されるアプリがあります。ここで、ユーザーが実際にそのコンテンツを表示する秒数を調べたいと思います。だから私のヘッダーファイルで、私は宣言しました
NSDate *startTime;
NSDate *endTime;
その後、私の意見で
startTime = [NSDate date];
その後、私の意見ではWillDisappear
endTime = [NSDate date];
NSTimeInterval secs = [endTime timeIntervalSinceDate:startTime];
NSLog(@"Seconds --------> %f", secs);
ただし、アプリがクラッシュし、異なるエラーが発生する場合があります。場合によってはメモリリーク、NSTimeIntervalの問題、そしてコンテンツに2度戻った後にクラッシュすることがあります。
これを修正するアイデアはありますか?
aRCを使用していないので、書くとき
startTime = [NSDate date];
startTime
は保持されないため、-viewWillDisappear
が呼び出される前に割り当てが解除されます。試して
startTime = [[NSDate date] retain];
また、ARCを使用することをお勧めします。メモリ管理を使用すると、使用しない場合よりもエラーがはるかに少なくなります。
開始日を保持するプロパティを宣言する必要があります。時差を計算する前に、日付がリリースされます。
だから宣言
@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];
}