2013-11-01 28 views
46

İçeriğin kullanıcıya görüntülendiği bir uygulamanız var. Şu anda bir kullanıcının bu içeriği gerçekten kaç saniyede görüntülediğini öğrenmek istiyorum. Yani benim başlık dosyasında, bazen farklı hatalarla,Saniye içinde 2 tarih arasındaki fark ios

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

Ancak benim viewWillDisappear benim viewWillAppear Sonra

startTime = [NSDate date]; 

bir

NSDate *startTime; 
NSDate *endTime; 

Sonra uygulama çökmeleri ilan ettik . Bazen bir bellek sızıntısı, bazen NSTimeInterval ile ilgili bir sorun ve bazen içeriğe ikinci kez geri döndükten sonra çöküyor.

Bunu düzeltmek için herhangi bir fikir var mı?

+1

Kilitlenme günlüğünü gönderin. – Jano

+0

Yukarıdaki kodyu düzenledim ... Bazen alabildiğim günlük: - [__ NSCFType timeIntervalSinceReferenceDate]: örneğin 0xbbf7c10 '' –

+0

'ye gönderilen tanınmayan seçici ARC kullanıyor musunuz? – medvedNick

cevap

13

Eğer ARC kullanmıyor çünkü sen -viewWillDisappear çağrılmadan önce o ayırmanın yüzden, startTime tutmayan

startTime = [NSDate date];

yazın.

startTime = [[NSDate date] retain];

Ayrıca, ARC kullanmayı tavsiye deneyin. Bununla birlikte bellek yönetiminde çok daha az hata olması gerekir.

11

Başlama tarihi için bir kayıt bildirmelisiniz. Saat farkı hesaplanmadan önce randevunuz yayılıyor.

Yani
@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]); 
} 

temizleme unutmayın ilan ediyoruz.

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