Как я могу использовать -[NSCoder encodeBytes:length:]
и -[NSCoder decodeBytesWithReturnedLength:]
с двойным?
У меня есть объект, соответствующий NSCoding
с двумя double
свойствами, и в настоящее время я использую NSNumber
для кодирования / декодирования значений:
- (id)initWithCoder:(NSCoder *)decoder
{
if (!(self = [super init]))
return nil;
latitude = [(NSNumber *)[decoder decodeObject] doubleValue];
longitude = [(NSNumber *)[decoder decodeObject] doubleValue];
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:[NSNumber numberWithDouble:latitude]];
[coder encodeObject:[NSNumber numberWithDouble:longitude]];
}
Однако это дает мне неприемлемую производительность (6 секунд для декодирования с моими данными испытаний, что намного меньше, чем производственные данные).
Если бы я использовал ключи, я мог бы использовать -encodeDouble:forKey:
, но я не использую ключи (они медленные), и в отличие от Mac OS X, в iOS нет метода -encodeDouble:
.
Итак, мне нужно использовать encodeBytes:length:
и decodeBytesWithReturnedLength:
, но мои способности C довольно ограничены. Я не совсем уверен, как конвертировать между void *
и double
.