對這個主題做了一些研究,但仍然沒有得到它。NSTimeInterval始終爲0
使用[NSDate timeIntervalSinceDate:NSDate]
時,NSTimeInterval始終爲0。
例子。
- (NSNumber*) elapsed
{
__block NSDate* currentDate;
dispatch_async(dispatch_get_main_queue(),
^{
currentDate = [NSDate date];
});
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.transactionStartedAt];
_elapsed = @(timeInterval*1000);
return _elapsed;
}
你可以看到我用dispatch_async主隊列,因爲此getter屬性從後臺排隊訪問,並且[NSDate的日期]返回nil,我這是怎麼想通解決這個問題。
然後,您可以看到我正在查找時間間隔並將其轉換爲兩個日期之間的毫秒數。
編輯:用此代碼解決時間間隔問題。
- (NSNumber*) elapsed
{
NSDate* currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.transactionStartedAt];
NSLog(@"TimeInterval: %f", timeInterval);
return @(timeInterval*1000);
}
這實際上是在對象的吸氣劑,所以如果我更改代碼以
- (NSNumber*) elapsed
{
NSDate* currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.transactionStartedAt];
NSLog(@"TimeInterval: %f", timeInterval);
return _elapsed = @(timeInterval*1000);
}
我得到EXC_BAD_ACCESS致命的異常。
我想我有問題,從另一個背景隊列中更改對象的創建!
問候。
爲什麼選擇GCD? 'dispatch_get_main_queue(), ^ { currentDate = [NSDate date]; });' –
這是另一個stackoverflow後的完美問題,但我也提到它。因爲一個原因,如果我不這樣做與GCD我得到[NSDate日期]零價值!瘋狂我知道。 –
[NSDate date]有一個隱式autorelease,不是? – Larme