Проведено некоторое исследование по этой теме, но до сих пор его нет.NSTimeInterval всегда 0
NSTimeInterval всегда 0 при использовании [NSDate timeIntervalSinceDate:NSDate]
.
Пример.
- (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 в основную очередь потому, что это свойство геттер доступ из фоновой очереди и [дата NSDate] возвращает ноль, это, как я понял, чтобы решить эту проблему.
Тогда вы можете видеть, что я ищу временной интервал и конвертируюсь в миллисекунды между двумя датами.
EDIT: проблема с временным интервалом решена с помощью этого кода.
- (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_async (dispatch_get_main_queue(), ^ { currentDate = [NSDate date]; });' –
Это отличный вопрос для другого сообщения stackoverflow, но я также упоминаю об этом. По какой-то причине, если я не делаю этого с GCD, я получаю значение [NSDate date] nil! Сумасшедший, я знаю. –
[NSDate date] имеет неявное авторекламу, нет? – Larme