iOS: Как проверить, выгружаются ли UIViewControllers? (Swift)

Я использую UISplitViewController каждый раз, когда я нажимаю на строку в viewDidLoad() VC, я вижу, что viewDidLoad() запущен в Detail VC.

Означает ли это, что я создаю новый экземпляр Detail VC для каждой строки?

Если да, то как я могу проверить правильность выгрузки детали VC и что я не просто создаю все новые и новые детали VC?

Я немного потерялся здесь, в Свифте. Раньше я мог NSLog в dealloc () и правильно выгружать UIViewController .

У меня здесь Swift есть функция deinit, но это никогда не называется:

 deinit { println("\(__FILE__.lastPathComponent)) : \(__FUNCTION__)") NSNotificationCenter.defaultCenter().removeObserver(self) } 

1) Где я должен удалять своих наблюдателей?

2) Когда я смотрю в Debug Navigator в Xcode, использование памяти просто продолжает расти и никогда не падает.

Обновлено: Подробно VC вызывается следующим образом:

 if segue.identifier == "addEvent" { if let controller = (segue.destinationViewController as UINavigationController).topViewController as? ManageViewController { controller.manageEvent = nil controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem() controller.navigationItem.leftItemsSupplementBackButton = true } } 

Я не делаю ничего другого, чем множество примеров, которые я видел, но я беспокоюсь о том,

Обновлено: Работа сейчас – проблема заключалась в том, что делегат прекратил вызывать вызов (см. Ниже ответ)

Мой оригинальный нерабочий код:

 protocol ManageViewDelegate { func pressedButton(sender: AnyObject) } class ManageView: UIView { var delegate: ManageViewDelegate? = nil ... } 

Новый рабочий код:

 protocol ManageViewDelegate: class { func pressedButton(sender: AnyObject) } class ManageView: UIView { weak var delegate: ManageViewDelegate? = nil ... } 

У вас есть представление с delegate которое ссылается на контроллер представления. Это приведет к сильному эталонному циклу (ранее известному как цикл сохранения), поскольку контроллер представления поддерживает сильную ссылку на его вид верхнего уровня, который, в свою очередь, поддерживает сильную ссылку на контроллер вида.

В разделе « Разрешение сильных ссылочных циклов между разделами экземпляров класса « Быстрый язык программирования »: автоматический подсчет ссылок , Apple описывает, как решить эту проблему:

Swift предоставляет два способа разрешения сильных эталонных циклов при работе со свойствами типа класса: слабые ссылки и неопубликованные ссылки.

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

Используйте weak ссылку, когда это действительно так, чтобы эта ссылка стала nil в какой-то момент в течение ее жизни. И наоборот, используйте unowned ссылку, когда знаете, что эта ссылка никогда не будет равна nil после ее установки во время инициализации.

Таким образом, вы можете решить свой сильный ссылочный цикл, указав, что delegate будет weak :

 weak var delegate: ManageViewDelegate? 

Для этого вам может потребоваться указать протокол в качестве протокола класса:

 protocol SomeDelegateProtocol: class { // your protocol here } 

Это решит сильный ссылочный цикл и избавит от необходимости вручную nil delegate , чтобы разрешить сильный ссылочный цикл.

Кроме того, если вы используете блоки, вам нужно добавить [слабое я], иначе вид не будет уничтожен

  setupObserve(postID) { [weak self] chatRequest in self?.update() } 

Функция deinit должна работать

  • Как показать контроллер разделенного вида на панели вкладок из другого раскадровки?
  • UISearchBar не будет отвечать в UISplitviewController Master
  • Части измерения вида iPad
  • Как создать segue из UIViewController в UISplitViewController
  • iOS: UISplitViewController не может быть нажат на UINavigationController
  • Почему меняется исходный код моего кадра, не обновляя его местоположение на экране? (iOS 8)
  • как перезагрузить rootViewController в другом ViewController в ipad
  • Сплит-контроллер должен быть контроллером корневого представления
  • UISplitViewController разделяет вертикаль вместо горизонтального
  • iOS SplitViewController: просмотр главного представления при загрузке в компактной ширине
  • Изменение главного представления в режиме Split View не обновляет popover в портрете
  • Interesting Posts

    Кнопка возврата UINavigationController не анимируется

    Изменить цвет фона кнопки с помощью быстрого языка

    Почему мое распределенное приложение выглядит иначе, чем во время отладки в xcode?

    Алгоритм создания кругового пути вокруг центральной массы?

    Не удалось выполнить проверку кода с помощью приложения iOS. codesign_wrapper-0.7.10: Не удалось загрузить профиль обеспечения из

    Тест XCUI: как щелкнуть ярлыки, заполненные во время выполнения

    Быстрые специальные символы Юникода в струнных литералах

    Могу ли я редактировать файл хоста iPad?

    Выделение текста / шрифта в OpenGLES 2 (iOS – CoreText?) – варианты и передовая практика?

    UIWebView запрашивает разрешение на размещение

    Могу ли я отправить текущее местоположение пользователя на сервер, когда приложение находится в фоновом режиме?

    Динамическое обновление контента в UITableView, доступном для VoiceOver

    Проблема с шумом AVPlayer после игры

    Почему addSubview: не сохранять вид?

    В чем смысл входа в область локализации локализации локализации в info.plist?

    Давайте будем гением компьютера.