Почему у плохой практики есть viewController?

У меня есть два контроллера вида, MainVC и ModalVC .

Когда пользователь нажимает кнопку на MainVC , появляется контроллер модального представления.

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

Я пробовал эти два метода, и они оба выполняют одно и то же: они отклоняют модальный контроллер:

 //method 1: // File: ModalVC.swift // @IBAction func dismissTapped() { self.dismissViewControllerAnimated(false, completion: nil); } 

Это хорошо работает, как я сказал, но рассмотрим другой метод: используя делегацию, чтобы позволить главному контроллеру отклонить:

 // method 2: part A // File: ModalVC.swift // protocol ModalVCDelegate { func modalVCDismissTapped(); } ... ... ... var delegat:ModalVCDelegate? = nil; ... ... @IBAction func dismissTapped() { delegate.modalVCDismissTapped(); } 

и в файле пользовательского класса основного контроллера контроля:

 // method 2: part B // File: MainVC.swift class MainVC : UIViewController, ModalVCDelegate { ... ... func modalVCDismissTapped() { self.dismissViewControllerAnimated(false, completion: nil); } } 

Поскольку эти два метода делают нужным, я должен беспокоиться о любой возможной утечке памяти?

Любое объяснение поможет

One Solution collect form web for “Почему у плохой практики есть viewController?”

Использование делегирования – лучший и более гибкий способ отклонить контроллер просмотра.
Цель этого заключается в том, что в каком-то будущем или в каком-либо другом месте вашего кода вы можете повторно использовать этот VC, но по некоторым причинам вы не можете представить его модально, а нажимать на стек навигации. Поэтому ваш ModalVC не знает, как это было представлено, но делегирует.
В этом случае у вас может быть 2 места в вашем коде

  1. Вы представляете это модальные и делегированные вызовы

     [self dismiss...] 
  2. Вы вставляете его в стек навигации и делегируете вызовы

     [self.navigationController popView...] 
  3. Вы добавляете его в качестве дочернего VC и делегирования вызовов

     [someParentVC removeChild..] 

    или любой другой соответствующий рабочий процесс для его удаления.

  • Наследование от базового контроллера Objective-c от Swift
  • Как прокрутить UIScrollView при загрузке при использовании автоматической компоновки
  • ContentInset неправильно настроен при отключении диспетчера представлений в iOS
  • Как уведомляет контроллер родительского представления о том, что его дочерний контроллер просмотра удалился?
  • Как добавить горизонтальную линию в iOS с помощью StoryBoard?
  • UITableView: popViewController и сохранить индекс строки в родительском контроллере?
  • Анимации UIViewController перестают работать
  • Передача данных обратно в предыдущий диспетчер представлений
  • iOS: представление контроллера вида в ландшафте прямо из контроллера вида, поддерживающего только портретный режим после поворота iphone
  • Как взаимодействовать с UITableView в UIViewController?
  • очень странная ошибка проекта Xcode?
  • Interesting Posts

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

    Где ушел «оконный» проект?

    Как сделать приложение ios в службах местоположения в настройках

    Реализация приложения: openURL: sourceApplication: аннотация

    Миграция основных данных невелика, хотя миграция не переносится

    пользовательский класс Location Manager с помощью CLLocationManager

    Предотвратить изменение формы iPhone?

    Уведомление о выпуске Urban Airship для iPhone: проблема SSL

    GoogleSignIn iOS – отключить SFSafariViewController

    Ключевые слова в App Store: использование ключевых слов «товарный знак»

    Создание статической библиотеки и добавление ее в проект

    Разрешить авторотацию только на одном контроллере представления

    UICollectionViewFlowLayout с элементами разного размера

    Не получать дату рождения от Facebook sdk 3.2 в iOS

    Проведите по экрану между UIView

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.