Essa é uma boa maneira de separar seu aplicativo.
Digamos que você queira responder em dois lugares diferentes a um evento de torneira. Um bom exemplo disso é quando você deseja ter algumas análises sobre eventos de torneira.
Todos concordaremos que colocar tudo dentro do manipulador de ação é uma ideia muito ruim. Talvez o purista do Cacau diga que delegar será a melhor opção, o que pode ser verdade. Mas acho que Notificações é outra boa opção e muito poderosa se usado corretamente.
Então, se você fizer algo como:
UITapGestureRecognizer *tap = [UITapGestureRecognizer.alloc initWithTarget:self action:@selector(singleTapAction:)];
tap.numberOfTapsRequired = 1;
tap.delegate = self;
Em seguida, você terá na ação uma postagem de notificação:
[NSNotificationCenter. defaultCenter postNotification:@"singleTap" object:aDataObject];
Dessa forma, você pode adicionar observadores sempre que precisar:
myObserver = [NSNotificationCenter.defaultCenter addObserverForName:@"singleTap" object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification *notification){
// Actions here
}];
Não se esqueça de remover seu observador no desalocador correspondente:
- (void)dealloc
{
[NSNotificationCenter.defaultCenter removeObserver:myObserver];
}