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 должна работать

  • Как мне обратиться к detailViewController на iPad, который использует splitViewController
  • Использование нескольких подробных представлений в UISplitView со Storyboards в Xcode 4.2?
  • Методы размера не вызываются для контроллера подробных представлений в UISplitViewController iOS8
  • черная полоса в UISplitViewController в UITabBarController
  • Почему splitViewController: collapseSecondaryViewController: onPrimaryViewController: не вызывается на iPhone 6 Plus?
  • Представление модального просмотра в деталях в UISplitViewController
  • Как использовать UISplitViewController в качестве Modal View Controller?
  • Splitviewcontroller с двумя табличными представлениями, делегировать проблему
  • Измените размер MasterViewController при запуске как popover
  • Появление в UINavigationController внутри UISplitViewController вызывает странный переход
  • Автоматическая прокрутка UITableViewController останавливается, принимая во внимание клавиатуру, когда она отображается из UISplitViewController
  • Interesting Posts

    Загрузка изображения в tumblr с помощью OAuthConsumer для iOS

    Xcode 8.1 Неопределенные символы для архитектуры x86_64 Ошибка

    IOS / PASSBOOK: Загрузите файл (.pkpass) из динамической ссылки из веб-представления IOS

    Swift. Воспроизведение прекрасного mp3-файла на симуляторе, но при воспроизведении на устройстве громкости не требуется. AVPlayer

    СприетКайт: следуйте за телом

    Текст в речь: выделение слово за словом для iphone

    iPad HTML5 по умолчанию клавиатура для просмотра символов?

    UIPanGestureRecognizer неточен на iPhone 5s + iOS 7

    Изменение изображения динамического штифта MKMapview после изменения масштаба

    Минимальный радиус для функции iOS CLRegion для LocatinManager

    Apple Watch и основные данные iCloud Syncing

    Отправка пользовательского UIViewController с помощью Chromecast

    iOS 6, Как настроить иконки UIBarButtonItem?

    AutoLayout Динамический .xib Высота просмотра

    Случайное уникальное генерация строк для использования как nonce (oauth)

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