Если вы можете передать nil
в качестве отправителя (что является традиционным) и использовать это, чтобы указать, что оно было отправлено программно, это нормально. Но все остальное, что я считаю слишком хрупким, и вы должны разбить код следующим образом:
- (void)someMethod {
// stuff shared by everyone
}
- (IBAction)someMethodWithIts:(id)sender {
// stuff specific to IBAction
[self someMethod];
}
Если вы действительно хотите отправителя, то вы можете сделать это следующим образом:
- (void)someMethodWithIts:(id)sender triggeredByUser:(BOOL)isUser {
}
- (IBAction)someMethodWithIts:(id)sender {
[self someMethodWithIts:sender triggeredByUser:YES];
}
Но в целом, если вы хотите, чтобы IBAction отличался от программных изменений, не связывайте программные изменения с IBAction.