NSCoding и целочисленные массивы - PullRequest
0 голосов
/ 04 октября 2010

Как вы используете NSCoding для кодирования (и декодирования) массива из десяти значений примитивного типа int?Кодируйте каждое целое число индивидуально (в цикле for).Но что если мой массив содержит миллион целых чисел?Есть ли здесь более подходящая альтернатива использованию цикла for?

Правка (после первого ответа): И декодировать?(@Justin: тогда я отмечу твой ответ.)

1 Ответ

2 голосов
/ 05 октября 2010

Если производительность вас беспокоит: CFData / NSData совместима с NSCoding, поэтому просто оберните ваше сериализованное представление массива как NSCFData.

редактировать для детализации кодирования / декодирования:

Ваш массив целых должен быть преобразован в обычный формат байтов (в зависимости от порядкового номера машины) - например, всегда храните его как младший или старший порядковый номер. во время кодирования преобразуйте его в массив целых чисел с указанным порядком байтов, который передается объекту NSData. затем передайте представление NSData экземпляру NSCoder. при декодировании вы получите NSData-объект для ключа, вы условно преобразуете его в собственный порядковый номер машины при декодировании. один набор процедур замены байтов, доступных для OS X и iOS, начинается с OSSwap*.

в качестве альтернативы см. -[NSCoder encodeBytes:voidPtr length:numBytes forKey:key]. эта процедура также требует от клиента обмена порядком байтов.

...