6. Что общего с C++ и К
• Си-подобный синтаксис
• Классы, методы, свойства, поля
• Интерфейсы (@protocol)
• Область видимости (@private, @public...)
• Исключения (@throw, @try...)
7. Различия: Посылка
сообщения в nil
1. - (void)traverseWithArray:(NSMutableArray *)array {
2. [array addObject:[NSNumber numberWithInt:value]];
3. [left traverseWithArray:array];
4. [right traverseWithArray:array];
5. }
• Не приводит к ошибке
• Возвращается “значение по умолчанию”
8. Различия: Посылка
сообщения в nil
1. - (void)traverseWithArray:(NSMutableArray *)array {
2. [array addObject:[NSNumber numberWithInt:value]];
3. [left traverseWithArray:array];
4. [right traverseWithArray:array];
5. }
• Не приводит к ошибке
• Возвращается “значение по умолчанию”
19. Отсылка сообщений
superclass
SEL -> address SEL selector = @selector(nodeWithValue:);
SEL -> address
•
superclass
SEL -> address
SEL -> address
Диспетчеризация во
время исполнения
isa • SEL - уникальный
field1
field2
идентификатор метода
20. Отсылка сообщений
superclass
SEL -> address SEL selector = @selector(nodeWithValue:);
SEL -> address
•
superclass
SEL -> address
SEL -> address
Диспетчеризация во
время исполнения
isa • SEL - уникальный
field1
field2
идентификатор метода
21. Отсылка сообщений
superclass
SEL -> address SEL selector = @selector(nodeWithValue:);
SEL -> address
•
superclass
SEL -> address
SEL -> address
Диспетчеризация во
время исполнения
isa • SEL - уникальный
field1
field2
идентификатор метода
22. Introspection
• Класс - это метаобъект
• NSObject содержит методы для получения
информации о типе
• Функции, начинающиеся с class_, также
возвращают информацию о типе
24. Интеграция с C/C++
• Objective-C (.m) & C++ == Objective-C++
(.mm)
• Можно: Использовать C/C++ код в классе
Objective-C и наоборот (в теле метода, в
поле класса)
• Нельзя: Наследовать класс C++ от класса
Objective-C и наоборот
- В left и right нет проверки на nil