NSKeyedArchiver поток безопасен?

Нужно ли беспокоиться об использовании archiveRootObject а также unarchiveObjectWithFile в фоновых темах?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [NSKeyedArchiver archiveRootObject:myArray toFile:file];
});

2 ответа

Решение

Вы должны быть очень осторожны с этим. archiveRootObject это не атомарная операция. Например, если вы позвоните archiveRootObject в фоновом потоке, в то время как другой поток изменяет состояние архивируемого объекта, вы можете в конечном итоге архивировать недопустимое состояние этого объекта. Конечно, это сильно зависит от вашего приложения и от того, как вы реализовали процедуры архивирования / разархивирования для ваших объектов.

Однако, если вы можете быть уверены, что объект не меняет своего состояния во время фонового потока архивирования, это должно быть безопасно.

Это синхронный вызов, поэтому, если вы сохраняете объемные данные и не хотите блокировать пользовательский интерфейс, вам следует рассмотреть фоновый поток.

Иначе, если ваше требование - показать некоторые состояния / проверки / операции по завершении, вам не нужен поток.

Наконец, все зависит от требований вашего приложения.

Проверьте больше по ссылке

Другие вопросы по тегам