Сохраняйте большие файлы в приложении для iOS - PullRequest
2 голосов
/ 09 июля 2011

Мне было интересно, что является лучшим способом (предложенным руководящими принципами Apple или здравым смыслом) для хранения больших файлов для приложения iOS.

Под большим я имею в виду, например, сохранение игры(что может быть, скажем, 500 КБ), так что размышления о списках невозможны.

Должен ли я просто сохранить его с помощью обычного API управления файлами Cocoa?А как насчет стандартных stdio (fopen, fwrite, что угодно)?

Ответы [ 2 ]

3 голосов
/ 09 июля 2011

Ваш главный приоритет должен быть в целом пользовательский опыт, в том числе:

  1. Поддерживайте отзывчивость приложения: сохраняйте только то, что изменилось.Если вам не нужно сохранять 500 Кб сразу, а изменилась только небольшая часть, вы можете рассмотреть вопрос о sqlite или нескольких меньших файлах.
  2. Используйте ресурсы устройства в режиме модерации: если ваше приложение расходуетсяИз-за непропорционального объема доступного пространства хранения пользователи с большей вероятностью удалят его.
  3. Используйте API, который лучше всего подходит для вашего подхода к пунктам 1 и 2 выше.Нет смысла переходить на дополнительные длины с конкретным API, если это не улучшит пользовательский опыт.

По моему опыту, операции с большими файлами имеют тенденцию быть относительно медленными, ноПроцессор относительно быстрый, поэтому, если у вас есть огромный кусок текста для сохранения, использование zlib для его сжатия хорошо работает (показатели сжатия текста высоки, а zlib довольно быстр).

2 голосов
/ 09 июля 2011

Есть много вариантов, и, конечно, лучший зависит от ваших требований. Вы можете, конечно, использовать стандартный ввод / вывод C, если хотите. Если у вас есть все ваши игровые данные в одном большом буфере, методы чтения / записи в файл NSData просты в использовании. Если у вас есть коллекция объектов, которые реализуют NSCoding, вы можете использовать NSKeyedArchiver / Unarchiver.

Вот один из способов использовать NSFileManager для поиска каталога документов вашего приложения:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
...