Когда я должен удалить ненужные данные для моего приложения iOS? Во время запуска или завершения?

Я использую CoreData и думаю о том, когда мне следует удалить ненужные (или просроченные) данные.

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

  1. Когда приложение запускается.
  2. Когда приложение заканчивается. (в приложении делегата applicationWillTerminate:)

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

Два выглядит красиво. Пользователи не видят время ожидания. Однако я не уверен, подходит ли этот пункт или нет? Некоторые люди говорят, что фоновый процесс имеет ограниченное время.

1 ответ

Решение

В любом случае вы, скорее всего, выиграете от запуска очистки во вторичном потоке. Скорее всего, вы не сможете использовать второй вариант:

Согласно Apple, документы по отношению к applicationWillTerminate:

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

Один из вариантов, который вы могли бы использовать, это очистка в applicationDidEnterBackground: но это также имеет некоторые сложности:

Ваша реализация этого метода имеет примерно пять секунд для выполнения любых задач и возврата. Если вам нужно дополнительное время для выполнения каких-либо окончательных задач, вы можете запросить дополнительное время выполнения у системы, вызвав beginBackgroundTaskWithExpirationHandler:. На практике вы должны вернуться из applicationDidEnterBackground: как можно быстрее. Если метод не возвращается до истечения времени, приложение закрывается и удаляется из памяти.

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

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