Как в Objective-C работает отправка сообщений?
Суть
В Objective-C [obj greet:name] — не вызов функции, а отправка сообщения. Компилятор не знает, какой код выполнится: он кладёт в вызов получателя, селектор (@selector(greet:) — уникальная строка-имя метода) и аргументы и вызывает objc_msgSend. Какая реализация (IMP) сработает, решается в момент вызова по классу получателя — это позднее связывание (late binding).
#import <Foundation/Foundation.h>
@interface Greeter : NSObject
- (NSString *)greet:(NSString *)name;
@end
@implementation Greeter
- (NSString *)greet:(NSString *)name {
return [NSString stringWithFormat:@"Hi, %@", name];
}
@end
static NSString *demo(Greeter *g) {
// компилятор превращает это в
// objc_msgSend(g, @selector(greet:), @"Ann")
return [g greet:@"Ann"];
}
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep