В каком случае вызывается метод при нажатие кнопки?
TL;DR
При нажатии на кнопку наш метод вызывается в обоих случаях.
Только в первом примере UIKit попытается вызвать метод в назначенном таргете(у нас это ViewController). Будет краш, если этого метода не существует.
Во втором же примере используется iOS Responder Chain, UIKit будет искать самого ближнего UIResponder-a у которого есть данный метод. Краша не будет, если наш метод не найден.
UIViewController, UIView, UIApplication наследуют от UIResponder.
Принципы основаны на известной методологии от heroku, адаптированы под реалии айос разработки (Отсутствие контейнеров, ревью которые занимают несколько дней и тормозят развертывания, работа Xcode только на маке).
Эта статья является коротким введением, полную серию можете найти на iOS-factor, так же доступен русский перевод. Проект iOS-factor с открытым исходным кодом на github, постоянно дорабатывается и приветствует новые идеи. Я так же принял участие в его развитии. Проект основан Феликсом который является создателем fastlane.
TL;DR
Зависимости: Должны быть явно и конкретно указаны (версия Xcode, CocoaPods, версия зависимостей в podfile). Это дает возможность воспроизвести билд на любом маке новому разработчике. Так же повторить сборку которая использовалась 6 месяцев назад.
Конфигурация: Нет конфигурации в коде, поставляется вместе с приложением и возможность обновить по воздуху