Если вы не передаете закодированные данные между платформами, где у вас могут возникнуть проблемы с порядком байтов и размером данных, вы можете использовать
- (void)encodeBytes:(const uint8_t*)bytesp length:(NSUInteger)lenv forKey:(NSString*)key;
для непосредственного хранения байтов, а затем
- (const uint8_t*)decodeBytesForKey:(NSString*)key returnedLength:(NSUInteger*)lengthp;
чтобы расшифровать их. Как указывает заголовочный файл NSCoder, метод decodeBytesForKey: returnLength: возвращает неизменяемые байты, поэтому вы захотите скопировать возвращенный массив в свой двойной массив. Поскольку возвращаемый массив является константным, я предполагаю, что декодер владеет этим массивом и освободит его, когда декодер освобожден.
Это не так удобно, как просто помещать массив в объект NSData и архивировать его, но это позволяет избежать накладных расходов на создание временного объекта.