2014-02-03 5 views
1

Скажем, у меня есть некоторые данные в моем приложении iOS, которое я хочу записать в файл. Я использую метод writeToFile:atomically: на NSData, который записывает данные в файл temp и затем переименовывает временный файл в указанное мной местоположение.iOS file renaming thread security

Является ли эта операция нить безопасной? Если я это сделаю из фонового потока, а затем попробую в очень неудачный момент из другого потока, если этот файл существует (или просто захватить содержимое этого файла), можно ли получить недопустимый результат?

ответ

1

По определению атомарно является потокобезопасным, если вы его захватите до завершения операции «Атомная», она не будет существовать. Если вы получите доступ к нему после завершения операции, тогда все будет в порядке.

Это похоже на атомное свойство свойств (которое мы обычно устанавливаем на неатомное). Он делает наборы & получает «атомный», что означает, что они происходят «в одно мгновение», и нет промежуточного состояния.

1

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

документация Apple, для [NSFileManager fileExistsAtPath:] имеет этот полезный совет (курсив мой):

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