NSArray и NSMutableArray не могут содержать целые числа напрямую. Он должен содержать объекты NSNumber.
В любом случае, я бы просто использовал NSCoding. Попробуйте методы archiveRootObject: toFile: (который записывается непосредственно в файл) или archivedDataWithRootObject (который преобразует содержимое в байтовый поток в NSData).
Для < = 1000 единиц он должен быть достаточно быстрым.
Если вы достаточно хорошо читаете и записываете массив, вы можете захотеть использовать массив массивов malloc'ed с «длинными» и сохранить это как байты в файл. Это было бы быстрее, и вы могли бы легко читать/записывать значения в свой массив C, вместо того, чтобы выполнять замену объекта. С другой стороны, изменение размера массива или вставки значений - это боль с помощью массива C, и вам также нужно знать о размерах данных и проблемах с байтовым порядком, если вы когда-либо передадите эти данные между устройствами.
Редактировать: Я просто написал небольшой тест и написал NSArray из 1000 NSNumbers в файл с archiveRootObject: toFile: занимает около 0.0038 секунд на старом iPhone 4, который у меня есть для тестирования. Это самая медленная машина, которая поддерживает iOS 7, и это 3,8 ТЫСЯЧИ секунды, чтобы написать 1000 пунктов. Поэтому запись массива из 10 000 предметов должна занимать 3,8 сотки секунды или меньше.
Если вы не читаете и не записываете этот массив много раз в секунду, используйте archiveRootObject: toFile: достаточно быстро.
это * много * данных (что, вероятно, было бы лучше в Core Data), или это просто * маленькие * данные (которые можно легко записать в файл plist или NSUserDefaults)? –
@MichaelDautermann Я отредактировал мой вопрос. Я не планирую, чтобы массив имел более 1000 объектов. – yiwei