Intereting Posts
Ошибка кодового знака. Идентификация «iPhone Distribution:» не соответствует какой-либо действующей паре с сертификатом / закрытым ключом без истечения срока действия. Любые решения? Текст 2 Речь работает с симулятором, но не с реальным устройством Segue всегда загружает новый экземпляр представления Набор карт Пользовательский PopupView вместо выноски Вид Bubble IOS Swift ARC с cocos2d, вызывающим неограниченный рост кучи и возможную потерю памяти? Проверьте, является ли NSURL активом iOS, Как узнать, является ли фотография снимком экрана, сделанным пользователем? Как удалить фотографии в Фото? Добавление пользовательского UIViewcontroller для подпрограммирования, но получение сообщения об ошибке «Невозможно преобразовать значение типа …» Как создать файл .dsym в Xcode 6.4 Мультипликация профиля Tinder Автозаполнение Google в swift не работает отлично ожидаемый идентификатор или '(' Воспроизведение AES зашифрованного потока hls с помощью avplayer – ios swift Большая центральная диспетчерская и параллельная проблема : сообщение отправлено на освобожденный экземпляр 0x7020100

Подходит для удаления файлов или закрытия соединения 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: