В случае Какао и NSObject @Tom является правильным - возникает исключение. При программировании на Какао, сначала доверяйте экспертам Какао. Статья в Википедии посвящена общему языку и среде исполнения и, возможно, также описывает поведение GNUstep. Поведение «игнорировать и вернуть ноль» больше похоже на то, что происходит, если вы отправляете сообщение на nil
. Трудно сказать, смутился ли автор или пытается описать поведение по умолчанию, не относящееся к какао.
@ mipadi также имеет большое преимущество в том, что Objective-C позволяет динамически обрабатывать вызовы нереализованных методов, в том числе перенаправлять их на произвольные объекты. Подробнее см. Методы NSObject -methodSignatureForSelector:
и -forwardInvocation:
. Если вы хотите динамически предоставлять методы таким образом, стоит обратить внимание и на возможность переопределения -respondsToSelector:
. (Все эти методы следует использовать только , если вы понимаете, что они делают, поскольку они сильно влияют на то, как экземпляры вашего класса взаимодействуют со средой выполнения Objective-C, и могут иметь непредвиденные результаты.)
Обратите внимание, что контракт для -doesNotRecognizeSelector: требует, чтобы в случае переопределения новая реализация должна вызвать в конце исключение NSInvalidArgumentException.
Редактировать: @Nikolai указал на удивительную запись в блоге Майка Эша , которая "еще глубже рассказывает о том, что происходит, когда среда выполнения не находит соответствующий селектор". Это определенно стоит прочитать. Я не знал об этом посте - спасибо, Николай!