2013-11-01 105 views
46

我有一個應用程序向用戶顯示內容。我現在想知道用戶實際查看該內容的秒數。所以在我的頭文件,我在我viewWillDisappear聲明的以秒爲單位的2個日期之間的差異ios

NSDate *startTime; 
NSDate *endTime; 

然後在我的viewWillAppear中

startTime = [NSDate date]; 

然後

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

然而,應用程序崩潰,用不同的誤差有時。有時候是內存泄漏,有時候這是NSTimeInterval的問題,有時會在第二次返回內容後崩潰。

任何想法來解決這個問題?

+1

發佈崩潰日誌。 – Jano

+0

我編輯了上面的代碼...我有時得到的日誌是: - [__ NSCFType timeIntervalSinceReferenceDate]:無法識別的選擇器發送到實例0xbbf7c10' –

+0

您使用的是ARC嗎? – medvedNick

回答

13

,因爲你不使用ARC,當你寫

startTime = [NSDate date];

你不保留startTime,所以-viewWillDisappear被調用之前就被釋放。嘗試

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]; 
} 
相關問題