Что делает сброс NSManagedContext? - PullRequest
0 голосов
/ 27 ноября 2011

Вот мой сценарий: у меня есть поток, выполняющий тяжелые вычисления, в конце сохраняющий результаты через основные данные. У меня есть поток, настроенный с собственным пулом авто-релиза, и в нем создан собственный NSManagedContext. Пользователь может изменить входные данные для вычисления в главном потоке, и в этом случае вычислительный поток завершается (посредством регулярных проверок переменной NSLocked) и повторно запускается с новыми входными данными. Здесь все отлично работает.

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

Однако я заметил, что есть метод сброса для NSManagedContext. Документация Apple по этому методу не очень полезна для меня. Он просто утверждает, что возвращает содержимое получателя в его базовое состояние и что все управляемые объекты получателя «забыты».

Что это значит? Это эквивалентно возврату к последней сохраненной версии? Требуется ли менеджер отмены для правильной работы этого метода? По какой причине я должен использовать этот метод вместо того, что я делаю сейчас?

1 Ответ

1 голос
/ 27 ноября 2011

Похоже, вы используете контекст для кэширования изменений независимо от контекста в главном потоке, и если вы не хотите, чтобы эти изменения записывались, вы просто выбрасываете их, удаляя «локальный» контекст.Это достаточно для сценария, который вы описываете.-reset может быть полезен, если вы не хотите перезапускать фоновый поток, а просто начать заново, используя тот же поток (и контекст), но с новыми входами.Поскольку вы запускаете новый поток (таким образом, создаете новый NSManagedObjectContext для него), -reset, вероятно, не очень полезен для вас в этом сценарии.Вы уже в значительной степени делаете это, как рекомендует Apple в нескольких своих примерах кода.

...