Один из главных комментариев по этому Вопросу специально спрашивает:
Во всех ответах упоминается идея одного типа ... но никто не объясняет, почему Interface Builder работает точно так же, если вы НЕ включаете IBAction / IBOutlet в свой источник. Есть ли другая причина для IBAction и IBOutlet или это нормально, чтобы оставить их?
На этот вопрос хорошо ответил NSHipster:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
Еще в 2004 году (и, возможно, ранее), IBAction больше не был необходим для того, чтобы метод был замечен Интерфейсным Разработчиком. Любой метод с подписью -(void){name}:(id)sender
будет виден на панели выходов.
Тем не менее, многие разработчики считают полезным по-прежнему использовать возвращаемый тип IBAction в объявлениях методов для обозначения того, что конкретный метод связан с действием. Даже проекты, не использующие раскадровки / XIB, могут использовать IBAction для вызова методов target / action.
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
В отличие от IBAction, IBOutlet все еще требуется для соединения свойств в коде с объектами в раскадровке или XIB.
Соединение IBOutlet обычно устанавливается между представлением или элементом управления и его управляющим контроллером представления (это часто делается в дополнение к любым действиям IBA, которые может выполнять целевой контроллер для ответчика). Однако IBOutlet также может использоваться для предоставления свойства верхнего уровня, такого как другой контроллер или свойство, к которому затем может обращаться ссылочный контроллер представления.