If the invoked method return void I can safely call all the delegates // otherwise I just invoke it on the first delegate that // respond to the given selector if ([invocation methodReturnTypeIsVoid]) { for (id delegate in self.mutableDelegates) { if ([delegate respondsToSelector:invocation.selector]) { [invocation invokeWithTarget:delegate]; } } } else { id firstResponder = [self p_firstResponderToSelector:invocation.selector]; [invocation invokeWithTarget:firstResponder]; } }