Подходит для удаления файлов или закрытия соединения DB в dealloc?

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

В частности, у меня есть подкласс UIViewController, который создает соединение с базой данных в -viewDidLoad и посредством взаимодействия с пользователем могут быть созданы временные файлы. Я хотел бы закрыть соединение с БД и удалить временные файлы (если они существуют), когда вышеупомянутый контроллер выскочит из стека навигации. Должен ли я делать это в dealloc?

Моя первая мысль заключалась в том, чтобы сделать эту БД и очистить файл в -viewDidUnload, но теперь я знаю, что этот метод вызывается только тогда, когда ОС выдает предупреждение о памяти. Другая мысль заключалась в том, чтобы поместить его в -viewDidDisappear: анимированный, но проблема с этим подходом заключается в том, что другое представление может переходить к тому, которое контролируется моим контроллером представления. В этом случае я не хочу закрывать соединение с БД или очищать временные файлы.

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

Руководство Apple по управлению памятью говорит: Нет.

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW13

Короче говоря, не используйте dealloc для управления ресурсами.

Вы можете сделать это в dealloc , или если вам нужны файлы во время жизненного цикла приложения, в приложении приложения делегата applicationWillTerminate: YMMV.

Не пытайтесь делать это в методе dealloc вашего контроллера.

Что произойдет, если контроллер просмотра будет сохранен где-то, чего вы не ожидаете? Метод dealloc не может быть запущен, и вы не очищаете никогда. Возможно, это не так в коде, который вы сейчас пишете, но что-то может измениться в будущем.

Есть ли какая-либо конкретная причина, по которой вы хотите связать удаление файлов и закрытие соединения с БД, чтобы вытащить контроллер вида? Если нет, возможно, вы могли бы сделать это сразу, как только ваш запрос завершится, или может иметь смысл открыть соединение с БД при запуске / переднем плане, а затем закрыть его при завершении / фоновой настройке.

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