2016-04-23 2 views
3

При чтении локального файла с NSData(contentsOfURL:options:), какой из них является подходящим вариантом для чтения?Какие NSDataReadingOptions следует использовать при чтении локального файла?

Также есть NSData(contentsOfURL:) без NSDataReadingOptions. Какой параметр чтения используется по умолчанию?

Для справки Apple docs.

ответ

3

Если вы используете метод:

NSData dataWithContentsOfFile:(NSString *)path 
         options:(NSDataReadingOptions)readOptionsMask 
         error:(NSError * _Nullable *)errorPtr; 

Соответствующие параметры зависят от того, что вы собираетесь делать с данными; как указано в Apple, Документация:

  • NSDataReadingUncached: Подсказка указывает на файл не должен храниться в файловой системе кэшей. (Для данных, которые считываются один раз и отбрасываются, этот параметр может повысить производительность.)
  • NSDataReadingMappedIfSafe: Подсказка, указывающая файл, должна быть отображена в виртуальную память, если это возможно и безопасно.
  • NSDataReadingMappedAlways: Подсказка, чтобы отобразить файл, если это возможно. (Это имеет преимущество перед NSDataReadingMappedIfSafe, если оба даны.)

Некоторые пояснения mappedFiles: следует использовать только в случае, если файл гарантированно существует в течение всего срока существования объекта данных. Как правило, безопаснее использовать метод dataWithContentsOfFile:.

При использовании параметров mappedFiles метод предполагает, что сопоставленные файлы доступны из базовой операционной системы. В сопоставленном файле используются методы виртуальной памяти, чтобы избежать копирования страниц в файл до тех пор, пока они не понадобятся.

Другой метод:

NSData dataWithContentsOfFile:(NSString *)path; 

Является эквивалентом dataWithContentsOfFile:options:error без каких-либо заданных опций.

Заключение

Если мы это вместе, вы должны использовать:

  • dataWithContentsOfFile: если у вас нет особых потребностей в данных, или проблемы использования памяти. Это более безопасный выбор.
  • dataWithContentsOfFile:options:error с NSDataReadingUncached вариант, если вы будете использовать данные только один раз
  • dataWithContentsOfFile:options:error с NSDataReadingMappedIfSafe вариант, если вы не хотите, чтобы немедленно загрузить весь файл, и вы уверены, что файл будет существует в течение всего срока службы NSData объект.
  • dataWithContentsOfFile:options:error с NSDataReadingMappedAlways вариант - то же, что и выше, но меньше гарантий.

Источники:

Apple Documentation : NSReadingOptions

Apple Documentation : dataWithContentsOfFile

Apple Documentation : dataWithContentsOfFile:options:error

Смежные вопросы