2011-01-10 1 views
5

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

Невозможно выполнить очистку, когда приложение перемещается в фоновый режим, поскольку оно может быть подсвечено в середине операции и потребует временных файлов после его возврата на передний план. Я думаю, что смогу очистить файлы при запуске, но меня все равно интересует поведение applicationWillTerminate:.

+0

Даже у меня была такая же проблема при создании игры на iPhone 4. Приложение не получало applicationWillTerminate: вызывается, когда пользователь выходит из приложения и не смог сохранить положение пользователя. Но в вашем случае я не думаю, что вам нужно беспокоиться об утечке памяти, поскольку память будет очищена, если указатель не укажет на нее, и временные файлы будут автоматически удалены. – Robin

+0

Он беспокоится о временных файлах, а не утечке памяти. Тем не менее, AFAIK, папка tmp очищается во время синхронизации с iTunes. –

ответ

5

Нет, applicationWillTerminate: не вызывается для устройств с iOS 4 с несколькими задачами. Когда ваше приложение завершается, обычно это означает, что на устройстве заканчивается память, поэтому даже если сделал, вызывается, что нет никакой информации о том, что у вас будет достаточно памяти для выполнения задачи в любом случае.

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

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

+0

Очистка на выходе приложения была бы проще для меня, но без другой возможности, я очищу ее после завершения операции. Благодаря! – zoul

1

Интернет говорит, что приложениеWillTerminate: не вызывается, пока приложение убито в фоновом режиме. Другой способ - сохранить некоторую информацию (в NSUserDefaults или так), какие временные файлы вы открыли, и после запуска проверьте, остались ли эти файлы и удалите их. Кроме того, вы можете узнать, как iOS убивает ваше приложение (я предполагаю, что это делается путем отправки сигналов, однако я не уверен) и добавьте обработчик сигнала в ваше приложение.