SlideShare a Scribd company logo
1 of 28
Objective-C 2.0
Краткое описание языка и среды исполнения
План доклада

•   Основные характеристики и синтаксис

•   Управление памятью

•   Отсылка сообщений

•   Метаинформация (Introspection)

•   Интеграция с C/C++
Основыные
       характеристики
•   Надмножество языка Си

•   Объектно-ориентированный

•   Компилируемый

•   Среда выполнения

•   Нет сборщика мусора
Пример кода
 1.   #import <Foundation/Foundation.h>
 2.
 3.   @interface TreeNode : NSObject {
 4.     TreeNode *left;
 5.     TreeNode *right;
 6.     int value;
 7.   }
 8.
 9.   @property (nonatomic, retain) TreeNode *left;
10.   @property (nonatomic, retain) TreeNode *right;
11.   @property (readonly) int value;
12.
13.   + (id)nodeWithValue:(int)value;
14.   - (id)initWithValue:(int)value;
15.   - (void)traverseWithArray:(NSMutableArray *)array;
16.
17.   @end
1.   @implementation TreeNode
 2.
 3.   @synthesize left, right, value;
 4.
 5.   + (id)nodeWithValue:(int)value {
 6.     return [[[self alloc] initWithValue:value] autorelease];
 7.   }
 8.
 9.   - (id)initWithValue:(int)value {
10.     if (self = [super init]) {
11.       self->value = value;
12.     }
13.     return self;
14.   }
15.
16.   - (void)traverseWithArray:(NSMutableArray *)array {
17.     [array addObject:[NSNumber numberWithInt:value]];
18.     [left traverseWithArray:array];
19.     [right traverseWithArray:array];
20.   }
21.
22.   - (void)dealloc {
23.     [left release];
24.     [right release];
25.     [super dealloc];
26.   }
27.
28.   @end
Что общего с C++ и К

•   Си-подобный синтаксис

•   Классы, методы, свойства, поля

•   Интерфейсы (@protocol)

•   Область видимости (@private, @public...)

•   Исключения (@throw, @try...)
Различия: Посылка
     сообщения в nil
      1.   - (void)traverseWithArray:(NSMutableArray *)array {
      2.     [array addObject:[NSNumber numberWithInt:value]];
      3.     [left traverseWithArray:array];
      4.     [right traverseWithArray:array];
      5.   }




•   Не приводит к ошибке

•   Возвращается “значение по умолчанию”
Различия: Посылка
     сообщения в nil
      1.   - (void)traverseWithArray:(NSMutableArray *)array {
      2.     [array addObject:[NSNumber numberWithInt:value]];
      3.     [left traverseWithArray:array];
      4.     [right traverseWithArray:array];
      5.   }




•   Не приводит к ошибке

•   Возвращается “значение по умолчанию”
Различия: Categories
 1.   @interface TreeNode(MoreTraversal)
 2.
 3.   - (void)inorderTraverseWithArray:(NSMutableArray *)array;
 4.
 5.   @end
 6.
 7.   @implementation TreeNode(MoreTraversal)
 8.
 9.   - (void)inorderTraverseWithArray:(NSMutableArray *)array {
10.     [left inorderTraverseWithArray:array];
11.     [array addObject:[NSNumber numberWithInt:value]];
12.     [right inorderTraverseWithArray:array];
13.   }
14.
15.   @end
Различия
•   Сообщение в nil

•   Categories

•   Нет @virtual, нет @abstract

•   Нет пространств имен

•   NSObject - “необязательный” базовый
    класс
Управление памятью

•   Нет сборки мусора

•   Подсчет ссылок

•   Вызываемый код ответственен за
    освобождение памяти, кроме alloc, new,
    copy
Управление памятью

1.   NSArray *array = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
2.   NSString *descr = [array description];
3.   [descr retain];
4.   [array release];
5.
6.   // Do something with descr...
7.
8.   [descr release];
Управление памятью
     1.   + (id)nodeWithValue:(int)value {
     2.     return [[[self alloc] initWithValue:value] autorelease];
     3.   }
     4.
     5.   //...
     6.
     7.   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     8.   TreeNode *root = [TreeNode nodeWithValue:1];
     9.   root.left = [TreeNode nodeWithValue:2];
    10.   root.right = [TreeNode nodeWithValue:3];
    11.   [pool release];




•   NSAutoreleasePool для автоматического
    освобождения объектов
Управление памятью
     1.   + (id)nodeWithValue:(int)value {
     2.     return [[[self alloc] initWithValue:value] autorelease];
     3.   }
     4.
     5.   //...
     6.
     7.   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     8.   TreeNode *root = [TreeNode nodeWithValue:1];
     9.   root.left = [TreeNode nodeWithValue:2];
    10.   root.right = [TreeNode nodeWithValue:3];
    11.   [pool release];




•   NSAutoreleasePool для автоматического
    освобождения объектов
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithValue:2];
        3.   root.right = [TreeNode nodeWithValue:3];
        4.   id array = [NSMutableArray array];
        5.   [root traverseWithArray:array];
        6.   NSString *descr = [array description];




•   Позднее (динамическое) связывание
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithValue:2];
        3.   root.right = [TreeNode nodeWithValue:3];
        4.   id array = [NSMutableArray array];
        5.   [root traverseWithArray:array];
        6.   NSString *descr = [array description];




•   Позднее (динамическое) связывание
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithValue:2];
        3.   root.right = [TreeNode nodeWithValue:3];
        4.   id array = [NSMutableArray array];
        5.   [root unknownMethod:array];
        6.   NSString *descr = [array description];




•   Явное указание типа - просто помощь
    компилятору
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithValue:2];
        3.   root.right = [TreeNode nodeWithValue:3];
        4.   id array = [NSMutableArray array];
        5.   [root unknownMethod:array];
        6.   NSString *descr = [array description];




•   Явное указание типа - просто помощь
    компилятору
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




                 •
superclass
SEL -> address
SEL -> address
                     Диспетчеризация во
                     время исполнения

   isa           •   SEL - уникальный
   field1
   field2
                     идентификатор метода
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




                 •
superclass
SEL -> address
SEL -> address
                     Диспетчеризация во
                     время исполнения

   isa           •   SEL - уникальный
   field1
   field2
                     идентификатор метода
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




                 •
superclass
SEL -> address
SEL -> address
                     Диспетчеризация во
                     время исполнения

   isa           •   SEL - уникальный
   field1
   field2
                     идентификатор метода
Introspection

•   Класс - это метаобъект

•   NSObject содержит методы для получения
    информации о типе

•   Функции, начинающиеся с class_, также
    возвращают информацию о типе
Introspection
 1.   static Class nodeClass;
 2.
 3.   //...
 4.
 5.   + (id)nodeWithValue:(int)value {
 6.     Class cls = nodeClass == nil ? self : nodeClass;
 7.     return [[[cls alloc] initWithValue:value] autorelease];
 8.   }
 9.
10.   + (void)setNodeClass:(Class)cls {
11.     if ([cls isSubclassOfClass:[TreeNode class]]) {
12.       nodeClass = cls;
13.     }
14.   }
15.
16.   //...
17.
18.   [TreeNode setNodeClass:[RBTreeNode class]];
19.   TreeNode *root = [TreeNode nodeWithValue:1];
Интеграция с C/C++
•   Objective-C (.m) & C++ == Objective-C++
    (.mm)

•   Можно: Использовать C/C++ код в классе
    Objective-C и наоборот (в теле метода, в
    поле класса)

•   Нельзя: Наследовать класс C++ от класса
    Objective-C и наоборот
Прочее

•   Runtime Method Resolution
    (resolveInstanceMethod:)

•   Message Forwarding (forwardInvocation:)

•   And more...
Литература


•   The Objective-C 2.0 Programming Language

•   Objective-C 2.0 Runtime Programming Guide

•   Learn Objective-C on the Mac (Apress)
Об авторе


•   Андрей Козачук, Stella Systems

•   dev.oyster@gmail.com
Благодарю за внимание

More Related Content

What's hot

Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
 
Learning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинLearning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинMail.ru Group
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»e-Legion
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Yandex
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.Roman Brovko
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Roman Brovko
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvoNoveo
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.Roman Brovko
 
Android - 01 - Java Basics
Android - 01 - Java BasicsAndroid - 01 - Java Basics
Android - 01 - Java BasicsNoveo
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Android - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsAndroid - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsNoveo
 

What's hot (20)

Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.Лекция 12. Быстрее, Python, ещё быстрее.
Лекция 12. Быстрее, Python, ещё быстрее.
 
Learning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинLearning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван Сметанин
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»Владимир Горбенко «Использование блоков в Objective-C»
Владимир Горбенко «Использование блоков в Objective-C»
 
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
Хранение данных в iPhone. (FMDB, SQL-Persistence, CoreData)
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.
 
Kvc, kvo
Kvc, kvoKvc, kvo
Kvc, kvo
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
Android - 01 - Java Basics
Android - 01 - Java BasicsAndroid - 01 - Java Basics
Android - 01 - Java Basics
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
Android - 03 - Multithreading, Collections
Android - 03 - Multithreading, CollectionsAndroid - 03 - Multithreading, Collections
Android - 03 - Multithreading, Collections
 

Viewers also liked

Connecting With Students[1]
Connecting With Students[1]Connecting With Students[1]
Connecting With Students[1]moorhead
 
SpriteKit (AnjLab Tech Talks)
SpriteKit (AnjLab Tech Talks)SpriteKit (AnjLab Tech Talks)
SpriteKit (AnjLab Tech Talks)AnjLab
 
Boom or Bust!
Boom or Bust!Boom or Bust!
Boom or Bust!janorthu
 
Quality Program Indicators 2
Quality Program Indicators 2Quality Program Indicators 2
Quality Program Indicators 2moorhead
 
iPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеiPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеYandex
 
Palomar5 Summit Presentation
Palomar5 Summit PresentationPalomar5 Summit Presentation
Palomar5 Summit PresentationMax Marmer
 
UI kit. Конструктор для больших проектов
UI kit. Конструктор для больших проектовUI kit. Конструктор для больших проектов
UI kit. Конструктор для больших проектовDenis Ilyin
 
Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Yandex
 
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классе
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классеМатематика. 1 класс. Урок 101. Повторение изученного в 1-м классе
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классеavtatuzova
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Ontico
 
Software testing objective_types
Software testing objective_typesSoftware testing objective_types
Software testing objective_typessangeeswaran
 

Viewers also liked (11)

Connecting With Students[1]
Connecting With Students[1]Connecting With Students[1]
Connecting With Students[1]
 
SpriteKit (AnjLab Tech Talks)
SpriteKit (AnjLab Tech Talks)SpriteKit (AnjLab Tech Talks)
SpriteKit (AnjLab Tech Talks)
 
Boom or Bust!
Boom or Bust!Boom or Bust!
Boom or Bust!
 
Quality Program Indicators 2
Quality Program Indicators 2Quality Program Indicators 2
Quality Program Indicators 2
 
iPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступлениеiPhoneDevCamp Ukraine - вступление
iPhoneDevCamp Ukraine - вступление
 
Palomar5 Summit Presentation
Palomar5 Summit PresentationPalomar5 Summit Presentation
Palomar5 Summit Presentation
 
UI kit. Конструктор для больших проектов
UI kit. Конструктор для больших проектовUI kit. Конструктор для больших проектов
UI kit. Конструктор для больших проектов
 
Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)Kanban at Yandex Images (Agile Days 2013)
Kanban at Yandex Images (Agile Days 2013)
 
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классе
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классеМатематика. 1 класс. Урок 101. Повторение изученного в 1-м классе
Математика. 1 класс. Урок 101. Повторение изученного в 1-м классе
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
 
Software testing objective_types
Software testing objective_typesSoftware testing objective_types
Software testing objective_types
 

Similar to Objective-C 2.0: краткое описание языка и рантайма

Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...CocoaHeads
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CГлеб Тарасов
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Nikolay Grebenshikov
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Ontico
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Pavel Egorov
 
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...it-people
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruAlexander Shcherbinin
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
 

Similar to Objective-C 2.0: краткое описание языка и рантайма (20)

Bytecode
BytecodeBytecode
Bytecode
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лук...
 
Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1Мастер класс по алгоритмам. Часть 1
Мастер класс по алгоритмам. Часть 1
 
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
Aleksey Yeschenko "Моделирование данных с помощью CQL3". Выступление на Cassa...
 
Lec 4
Lec 4Lec 4
Lec 4
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
хранение данных
хранение данныххранение данных
хранение данных
 
Active Record for CoreData
Active Record for CoreDataActive Record for CoreData
Active Record for CoreData
 

More from Yandex

Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Yandex
 
Обзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKОбзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKYandex
 
Push-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяPush-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяYandex
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюYandex
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)Yandex
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраYandex
 

More from Yandex (6)

Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
Разработка кросс-платформенного кода между iPhone &lt; -> Windows с помощью o...
 
Обзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDKОбзор фреймворков в iPhone SDK
Обзор фреймворков в iPhone SDK
 
Push-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователяPush-уведомления для разработчика и пользователя
Push-уведомления для разработчика и пользователя
 
Unity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложениюUnity3d - простой путь к iPhone приложению
Unity3d - простой путь к iPhone приложению
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Принципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометраПринципы разработки ПО для iPhone с использованием акселерометра
Принципы разработки ПО для iPhone с использованием акселерометра
 

Objective-C 2.0: краткое описание языка и рантайма

  • 1. Objective-C 2.0 Краткое описание языка и среды исполнения
  • 2. План доклада • Основные характеристики и синтаксис • Управление памятью • Отсылка сообщений • Метаинформация (Introspection) • Интеграция с C/C++
  • 3. Основыные характеристики • Надмножество языка Си • Объектно-ориентированный • Компилируемый • Среда выполнения • Нет сборщика мусора
  • 4. Пример кода 1. #import <Foundation/Foundation.h> 2. 3. @interface TreeNode : NSObject { 4. TreeNode *left; 5. TreeNode *right; 6. int value; 7. } 8. 9. @property (nonatomic, retain) TreeNode *left; 10. @property (nonatomic, retain) TreeNode *right; 11. @property (readonly) int value; 12. 13. + (id)nodeWithValue:(int)value; 14. - (id)initWithValue:(int)value; 15. - (void)traverseWithArray:(NSMutableArray *)array; 16. 17. @end
  • 5. 1. @implementation TreeNode 2. 3. @synthesize left, right, value; 4. 5. + (id)nodeWithValue:(int)value { 6. return [[[self alloc] initWithValue:value] autorelease]; 7. } 8. 9. - (id)initWithValue:(int)value { 10. if (self = [super init]) { 11. self->value = value; 12. } 13. return self; 14. } 15. 16. - (void)traverseWithArray:(NSMutableArray *)array { 17. [array addObject:[NSNumber numberWithInt:value]]; 18. [left traverseWithArray:array]; 19. [right traverseWithArray:array]; 20. } 21. 22. - (void)dealloc { 23. [left release]; 24. [right release]; 25. [super dealloc]; 26. } 27. 28. @end
  • 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. } • Не приводит к ошибке • Возвращается “значение по умолчанию”
  • 9. Различия: Categories 1. @interface TreeNode(MoreTraversal) 2. 3. - (void)inorderTraverseWithArray:(NSMutableArray *)array; 4. 5. @end 6. 7. @implementation TreeNode(MoreTraversal) 8. 9. - (void)inorderTraverseWithArray:(NSMutableArray *)array { 10. [left inorderTraverseWithArray:array]; 11. [array addObject:[NSNumber numberWithInt:value]]; 12. [right inorderTraverseWithArray:array]; 13. } 14. 15. @end
  • 10. Различия • Сообщение в nil • Categories • Нет @virtual, нет @abstract • Нет пространств имен • NSObject - “необязательный” базовый класс
  • 11. Управление памятью • Нет сборки мусора • Подсчет ссылок • Вызываемый код ответственен за освобождение памяти, кроме alloc, new, copy
  • 12. Управление памятью 1. NSArray *array = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 2. NSString *descr = [array description]; 3. [descr retain]; 4. [array release]; 5. 6. // Do something with descr... 7. 8. [descr release];
  • 13. Управление памятью 1. + (id)nodeWithValue:(int)value { 2. return [[[self alloc] initWithValue:value] autorelease]; 3. } 4. 5. //... 6. 7. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 8. TreeNode *root = [TreeNode nodeWithValue:1]; 9. root.left = [TreeNode nodeWithValue:2]; 10. root.right = [TreeNode nodeWithValue:3]; 11. [pool release]; • NSAutoreleasePool для автоматического освобождения объектов
  • 14. Управление памятью 1. + (id)nodeWithValue:(int)value { 2. return [[[self alloc] initWithValue:value] autorelease]; 3. } 4. 5. //... 6. 7. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 8. TreeNode *root = [TreeNode nodeWithValue:1]; 9. root.left = [TreeNode nodeWithValue:2]; 10. root.right = [TreeNode nodeWithValue:3]; 11. [pool release]; • NSAutoreleasePool для автоматического освобождения объектов
  • 15. Отсылка сообщений 1. TreeNode *root = [TreeNode nodeWithValue:1]; 2. root.left = [TreeNode nodeWithValue:2]; 3. root.right = [TreeNode nodeWithValue:3]; 4. id array = [NSMutableArray array]; 5. [root traverseWithArray:array]; 6. NSString *descr = [array description]; • Позднее (динамическое) связывание
  • 16. Отсылка сообщений 1. TreeNode *root = [TreeNode nodeWithValue:1]; 2. root.left = [TreeNode nodeWithValue:2]; 3. root.right = [TreeNode nodeWithValue:3]; 4. id array = [NSMutableArray array]; 5. [root traverseWithArray:array]; 6. NSString *descr = [array description]; • Позднее (динамическое) связывание
  • 17. Отсылка сообщений 1. TreeNode *root = [TreeNode nodeWithValue:1]; 2. root.left = [TreeNode nodeWithValue:2]; 3. root.right = [TreeNode nodeWithValue:3]; 4. id array = [NSMutableArray array]; 5. [root unknownMethod:array]; 6. NSString *descr = [array description]; • Явное указание типа - просто помощь компилятору
  • 18. Отсылка сообщений 1. TreeNode *root = [TreeNode nodeWithValue:1]; 2. root.left = [TreeNode nodeWithValue:2]; 3. root.right = [TreeNode nodeWithValue:3]; 4. id array = [NSMutableArray array]; 5. [root unknownMethod:array]; 6. NSString *descr = [array description]; • Явное указание типа - просто помощь компилятору
  • 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_, также возвращают информацию о типе
  • 23. Introspection 1. static Class nodeClass; 2. 3. //... 4. 5. + (id)nodeWithValue:(int)value { 6. Class cls = nodeClass == nil ? self : nodeClass; 7. return [[[cls alloc] initWithValue:value] autorelease]; 8. } 9. 10. + (void)setNodeClass:(Class)cls { 11. if ([cls isSubclassOfClass:[TreeNode class]]) { 12. nodeClass = cls; 13. } 14. } 15. 16. //... 17. 18. [TreeNode setNodeClass:[RBTreeNode class]]; 19. TreeNode *root = [TreeNode nodeWithValue:1];
  • 24. Интеграция с C/C++ • Objective-C (.m) & C++ == Objective-C++ (.mm) • Можно: Использовать C/C++ код в классе Objective-C и наоборот (в теле метода, в поле класса) • Нельзя: Наследовать класс C++ от класса Objective-C и наоборот
  • 25. Прочее • Runtime Method Resolution (resolveInstanceMethod:) • Message Forwarding (forwardInvocation:) • And more...
  • 26. Литература • The Objective-C 2.0 Programming Language • Objective-C 2.0 Runtime Programming Guide • Learn Objective-C on the Mac (Apress)
  • 27. Об авторе • Андрей Козачук, Stella Systems • dev.oyster@gmail.com

Editor's Notes

  1. - &amp;#x41F;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x440;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x44E; &amp;#x43F;&amp;#x440;&amp;#x43E; &amp;#x44F;&amp;#x437;&amp;#x44B;&amp;#x43A; - Intended audience
  2. - &amp;#x41E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x442;&amp;#x438;&amp;#x43F;&amp;#x44B; &amp;#x438; &amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x443;&amp;#x43A;&amp;#x446;&amp;#x438;&amp;#x438; &amp;#x438;&amp;#x437; &amp;#x421;&amp;#x438; - &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; - &amp;#x434;&amp;#x432;&amp;#x43E;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x43E;&amp;#x435; &amp;#x434;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x432;&amp;#x43E;
  3. - #import, &amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x435;&amp;#x432;&amp;#x44B;&amp;#x435; &amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x432;&amp;#x430; - 2 &amp;#x447;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x438;: @interface &amp;#x438; @implementation - &amp;#x41D;&amp;#x430;&amp;#x441;&amp;#x43B;&amp;#x435;&amp;#x434;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43E;&amp;#x442; NSObject - &amp;#x421;&amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x430;&amp;#x43B;&amp;#x430; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x44F; - &amp;#x41E;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x439;&amp;#x441;&amp;#x442;&amp;#x432;, &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x432;, &amp;#x442;&amp;#x438;&amp;#x43F;&amp;#x43E;&amp;#x432;, &amp;#x43A;&amp;#x430;&amp;#x43A; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x44B; &amp;#x432;&amp;#x44B;&amp;#x433;&amp;#x43B;&amp;#x44F;&amp;#x434;&amp;#x44F;&amp;#x442;
  4. - &amp;#x41E; @synthesise - &amp;#x412;&amp;#x44B;&amp;#x437;&amp;#x43E;&amp;#x432; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x432;
  5. - &amp;#x41E;&amp;#x447;&amp;#x435;&amp;#x43D;&amp;#x44C; &amp;#x43F;&amp;#x43E;&amp;#x445;&amp;#x43E;&amp;#x436;&amp;#x435; &amp;#x43D;&amp;#x430; C#/Java
  6. - &amp;#x412; left &amp;#x438; right &amp;#x43D;&amp;#x435;&amp;#x442; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x43A;&amp;#x438; &amp;#x43D;&amp;#x430; nil
  7. - &amp;#x414;&amp;#x43E;&amp;#x43F;&amp;#x443;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x43C;, &amp;#x445;&amp;#x43E;&amp;#x442;&amp;#x438;&amp;#x43C; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x44B;&amp;#x439; traverse - &amp;#x41E;&amp;#x442;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; &amp;#x43E;&amp;#x442; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x43E;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x430; - &amp;#x414;&amp;#x430;&amp;#x436;&amp;#x435; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x43E;&amp;#x432; &amp;#x438;&amp;#x437; &amp;#x431;&amp;#x438;&amp;#x431;&amp;#x43B;&amp;#x438;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x438; - &amp;#x41D;&amp;#x43E;&amp;#x432;&amp;#x44B;&amp;#x435; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x44F; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x44F;&amp;#x432;&amp;#x43B;&amp;#x44F;&amp;#x442;&amp;#x44C; &amp;#x43D;&amp;#x435;&amp;#x43B;&amp;#x44C;&amp;#x437;&amp;#x44F;
  8. - &amp;#x41D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x44F;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x44B;&amp;#x439; - &amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x442; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x439;, &amp;#x43D;&amp;#x43E; &amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E;
  9. - &amp;#x41D;&amp;#x435; managed &amp;#x43C;&amp;#x438;&amp;#x440; - &amp;#x415;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x441;&amp;#x431;&amp;#x43E;&amp;#x440;&amp;#x449;&amp;#x438;&amp;#x43A;, &amp;#x43D;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; &amp;#x432; &amp;#x201C;&amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x43E;&amp;#x43C;&amp;#x201D; &amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x439;&amp;#x43C;&amp;#x435; - &amp;#x422;.&amp;#x435;. &amp;#x432;&amp;#x430;&amp;#x448; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x439; &amp;#x441;&amp;#x43E;&amp;#x437;&amp;#x434;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x43A;&amp;#x442;, &amp;#x43E;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x435;&amp;#x43D; &amp;#x437;&amp;#x430; &amp;#x43E;&amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;
  10. - &amp;#x412;&amp;#x44B;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x44F;&amp;#x435;&amp;#x43C; &amp;#x441;&amp;#x430;&amp;#x43C;&amp;#x438;, &amp;#x43E;&amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x436;&amp;#x434;&amp;#x430;&amp;#x435;&amp;#x43C; &amp;#x441;&amp;#x430;&amp;#x43C;&amp;#x438; - descr - &amp;#x447;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x44C; NSArray, &amp;#x438; &amp;#x442;&amp;#x43E;&amp;#x436;&amp;#x435; &amp;#x43E;&amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x441;&amp;#x44F; - retain - &amp;#x447;&amp;#x442;&amp;#x43E;&amp;#x431;&amp;#x44B; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x430;&amp;#x43B;&amp;#x441;&amp;#x44F;
  11. - &amp;#x41D;&amp;#x430;&amp;#x448; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; &amp;#x432;&amp;#x43E;&amp;#x437;&amp;#x432;&amp;#x440;&amp;#x430;&amp;#x449;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x43A;&amp;#x442; - autorelease - NSAutoreleasePool. &amp;#x41C;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x442; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x44B;&amp;#x43C; - &amp;#x415;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x433;&amp;#x43B;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x44B;&amp;#x439; NSAutoreleasePool &amp;#x432; main &amp;#x43F;&amp;#x43E;&amp;#x434; iPhone
  12. - &amp;#x41E;&amp;#x442;&amp;#x441;&amp;#x44B;&amp;#x43B;&amp;#x43A;&amp;#x430; &amp;#x441;&amp;#x43E;&amp;#x43E;&amp;#x431;&amp;#x449;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x439; &amp;#x43E;&amp;#x442;&amp;#x43B;&amp;#x438;&amp;#x447;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x438; &amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x446;&amp;#x435;&amp;#x43F;&amp;#x442;&amp;#x443;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; - &amp;#x41A;&amp;#x43E;&amp;#x434; &amp;#x43D;&amp;#x435; &amp;#x432;&amp;#x44B;&amp;#x437;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x442; &amp;#x43E;&amp;#x448;&amp;#x438;&amp;#x431;&amp;#x43E;&amp;#x43A; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x43F;&amp;#x438;&amp;#x43B;&amp;#x44F;&amp;#x446;&amp;#x438;&amp;#x438;/&amp;#x432;&amp;#x44B;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; (id array) - &amp;#x421;&amp;#x432;&amp;#x44F;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x432;&amp;#x43E; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x44F; &amp;#x432;&amp;#x44B;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;
  13. - &amp;#x422;&amp;#x43E;&amp;#x442; &amp;#x436;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x434;, &amp;#x43D;&amp;#x43E; &amp;#x442;&amp;#x435;&amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x44C; &amp;#x43D;&amp;#x435;&amp;#x438;&amp;#x437;&amp;#x432;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43D;&amp;#x44B;&amp;#x439; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; - &amp;#x41A;&amp;#x43E;&amp;#x43C;&amp;#x43F;&amp;#x438;&amp;#x43B;&amp;#x44F;&amp;#x442;&amp;#x43E;&amp;#x440; &amp;#x432;&amp;#x44B;&amp;#x434;&amp;#x430;&amp;#x441;&amp;#x442; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; warning, &amp;#x43E;&amp;#x448;&amp;#x438;&amp;#x431;&amp;#x43A;&amp;#x430; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x442; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x432; &amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x439;&amp;#x43C;&amp;#x435;
  14. - &amp;#x418;&amp;#x442;&amp;#x430;&amp;#x43A;, &amp;#x43F;&amp;#x43E;&amp;#x433;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x440;&amp;#x438;&amp;#x43C; &amp;#x43E; &amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x439;&amp;#x43C;&amp;#x435; - &amp;#x412;&amp;#x44B;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43E;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x43A;&amp;#x430; &amp;#x43A; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x43A;&amp;#x443; - &amp;#x41F;&amp;#x43E;&amp;#x438;&amp;#x441;&amp;#x43A; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x43D;&amp;#x435; &amp;#x43F;&amp;#x43E; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438;, &amp;#x430; &amp;#x43F;&amp;#x43E; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x443; - &amp;#x443;&amp;#x43D;&amp;#x438;&amp;#x43A;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x44B;&amp;#x439; id &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x430; - &amp;#x41A;&amp;#x430;&amp;#x43A; &amp;#x432;&amp;#x438;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x435;, &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441; - &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x43A;&amp;#x442;
  15. - &amp;#x418;&amp;#x442;&amp;#x430;&amp;#x43A;, &amp;#x43F;&amp;#x43E;&amp;#x433;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x440;&amp;#x438;&amp;#x43C; &amp;#x43E; &amp;#x440;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x439;&amp;#x43C;&amp;#x435; - &amp;#x412;&amp;#x44B;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43E;&amp;#x442; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x43A;&amp;#x430; &amp;#x43A; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x43A;&amp;#x443; - &amp;#x41F;&amp;#x43E;&amp;#x438;&amp;#x441;&amp;#x43A; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x43D;&amp;#x435; &amp;#x43F;&amp;#x43E; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438;, &amp;#x430; &amp;#x43F;&amp;#x43E; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x443; - &amp;#x443;&amp;#x43D;&amp;#x438;&amp;#x43A;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x44B;&amp;#x439; id &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x430; - &amp;#x41A;&amp;#x430;&amp;#x43A; &amp;#x432;&amp;#x438;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x435;, &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441; - &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x43A;&amp;#x442;
  16. - &amp;#x41C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x443;&amp;#x447;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441; &amp;#x438; &amp;#x432;&amp;#x44B;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x44B; &amp;#x443; &amp;#x43D;&amp;#x435;&amp;#x433;&amp;#x43E;, &amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x43F;&amp;#x43E; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x430;
  17. - &amp;#x424;&amp;#x430;&amp;#x431;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x44B;&amp;#x439; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434; - &amp;#x420;&amp;#x435;&amp;#x433;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x438;&amp;#x443;&amp;#x435;&amp;#x43C; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441; &amp;#x443;&amp;#x437;&amp;#x43B;&amp;#x430; &amp;#x434;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x432;&amp;#x430; &amp;#x438; &amp;#x438;&amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x437;&amp;#x443;&amp;#x435;&amp;#x43C; - isSubclassOfClass: - &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440; &amp;#x43C;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x434;&amp;#x430; introspection - &amp;#x414;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x435; &amp;#x432; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x435; &amp;#x441;&amp;#x43E;&amp;#x437;&amp;#x434;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x438;&amp;#x43D;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x43D;&amp;#x441; &amp;#x434;&amp;#x440;&amp;#x443;&amp;#x433;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x430;