2015-07-13 2 views
2

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

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

ответ

4

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

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

1

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

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

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

Проверить еще на link

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