DevPrep

Все темы › Objective-C

Как в Objective-C работает отправка сообщений?

Middle PRO

Суть

В 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

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store