• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Objective-C 2.0: краткое описание языка и рантайма
 

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

on

  • 3,694 views

 

Statistics

Views

Total Views
3,694
Views on SlideShare
3,251
Embed Views
443

Actions

Likes
1
Downloads
23
Comments
0

5 Embeds 443

http://www.iphonedev.com.ua 367
http://iphonedevcamp.com.ua 50
http://www.slideshare.net 14
http://feeds2.feedburner.com 11
http://feeds.feedburner.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • - &#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x440;&#x430;&#x441;&#x441;&#x43A;&#x430;&#x437;&#x44B;&#x432;&#x430;&#x44E; &#x43F;&#x440;&#x43E; &#x44F;&#x437;&#x44B;&#x43A; <br /> - Intended audience
  • - &#x41E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x44B;&#x435; &#x442;&#x438;&#x43F;&#x44B; &#x438; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x443;&#x43A;&#x446;&#x438;&#x438; &#x438;&#x437; &#x421;&#x438; <br /> - &#x41F;&#x440;&#x438;&#x43C;&#x435;&#x440; &#x43A;&#x43E;&#x434;&#x430; - &#x434;&#x432;&#x43E;&#x438;&#x447;&#x43D;&#x43E;&#x435; &#x434;&#x435;&#x440;&#x435;&#x432;&#x43E;
  • - #import, &#x43A;&#x43B;&#x44E;&#x447;&#x435;&#x432;&#x44B;&#x435; &#x441;&#x43B;&#x43E;&#x432;&#x430; <br /> - 2 &#x447;&#x430;&#x441;&#x442;&#x438;: @interface &#x438; @implementation <br /> - &#x41D;&#x430;&#x441;&#x43B;&#x435;&#x434;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x43E;&#x442; NSObject <br /> - &#x421;&#x43D;&#x430;&#x447;&#x430;&#x43B;&#x430; &#x43F;&#x43E;&#x43B;&#x44F; <br /> - &#x41E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x441;&#x432;&#x43E;&#x439;&#x441;&#x442;&#x432;, &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432;, &#x442;&#x438;&#x43F;&#x43E;&#x432;, &#x43A;&#x430;&#x43A; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x432;&#x44B;&#x433;&#x43B;&#x44F;&#x434;&#x44F;&#x442;
  • - &#x41E; @synthesise <br /> - &#x412;&#x44B;&#x437;&#x43E;&#x432; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x43E;&#x432;
  • - &#x41E;&#x447;&#x435;&#x43D;&#x44C; &#x43F;&#x43E;&#x445;&#x43E;&#x436;&#x435; &#x43D;&#x430; C#/Java
  • - &#x412; left &#x438; right &#x43D;&#x435;&#x442; &#x43F;&#x440;&#x43E;&#x432;&#x435;&#x440;&#x43A;&#x438; &#x43D;&#x430; nil
  • - &#x414;&#x43E;&#x43F;&#x443;&#x441;&#x442;&#x438;&#x43C;, &#x445;&#x43E;&#x442;&#x438;&#x43C; &#x434;&#x43E;&#x431;&#x430;&#x432;&#x438;&#x442;&#x44C; &#x43D;&#x43E;&#x432;&#x44B;&#x439; traverse <br /> - &#x41E;&#x442;&#x434;&#x435;&#x43B;&#x44C;&#x43D;&#x43E; &#x43E;&#x442; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x433;&#x43E; &#x43E;&#x43F;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x44F; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430; <br /> - &#x414;&#x430;&#x436;&#x435; &#x434;&#x43B;&#x44F; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x43E;&#x432; &#x438;&#x437; &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x438; <br /> - &#x41D;&#x43E;&#x432;&#x44B;&#x435; &#x43F;&#x43E;&#x43B;&#x44F; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x43B;&#x44F;&#x442;&#x44C; &#x43D;&#x435;&#x43B;&#x44C;&#x437;&#x44F;
  • - &#x41D;&#x435;&#x43E;&#x431;&#x44F;&#x437;&#x430;&#x442;&#x435;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; - &#x437;&#x43D;&#x430;&#x447;&#x438;&#x442; &#x43C;&#x43E;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x43F;&#x438;&#x441;&#x430;&#x442;&#x44C; &#x441;&#x432;&#x43E;&#x439;, &#x43D;&#x43E; &#x441;&#x43B;&#x43E;&#x436;&#x43D;&#x43E;
  • - &#x41D;&#x435; managed &#x43C;&#x438;&#x440; <br /> - &#x415;&#x441;&#x442;&#x44C; &#x441;&#x431;&#x43E;&#x440;&#x449;&#x438;&#x43A;, &#x43D;&#x43E; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; &#x432; &#x201C;&#x431;&#x43E;&#x43B;&#x44C;&#x448;&#x43E;&#x43C;&#x201D; &#x440;&#x430;&#x43D;&#x442;&#x430;&#x439;&#x43C;&#x435; <br /> - &#x422;.&#x435;. &#x432;&#x430;&#x448; &#x43C;&#x435;&#x442;&#x43E;&#x434;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x435;&#x442; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;, &#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x442;&#x432;&#x435;&#x43D;&#x435;&#x43D; &#x437;&#x430; &#x43E;&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x436;&#x43D;&#x435;&#x43D;&#x438;&#x435;
  • - &#x412;&#x44B;&#x434;&#x435;&#x43B;&#x44F;&#x435;&#x43C; &#x441;&#x430;&#x43C;&#x438;, &#x43E;&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x436;&#x434;&#x430;&#x435;&#x43C; &#x441;&#x430;&#x43C;&#x438; <br /> - descr - &#x447;&#x430;&#x441;&#x442;&#x44C; NSArray, &#x438; &#x442;&#x43E;&#x436;&#x435; &#x43E;&#x441;&#x432;&#x43E;&#x431;&#x43E;&#x434;&#x438;&#x442;&#x441;&#x44F; <br /> - retain - &#x447;&#x442;&#x43E;&#x431;&#x44B; &#x43D;&#x435; &#x441;&#x43E;&#x431;&#x440;&#x430;&#x43B;&#x441;&#x44F;
  • - &#x41D;&#x430;&#x448; &#x43C;&#x435;&#x442;&#x43E;&#x434; &#x432;&#x43E;&#x437;&#x432;&#x440;&#x430;&#x449;&#x430;&#x435;&#x442; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442; - autorelease <br /> - NSAutoreleasePool. &#x41C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x432;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x43D;&#x44B;&#x43C; <br /> - &#x415;&#x441;&#x442;&#x44C; &#x433;&#x43B;&#x43E;&#x431;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; NSAutoreleasePool &#x432; main &#x43F;&#x43E;&#x434; iPhone
  • - &#x41E;&#x442;&#x441;&#x44B;&#x43B;&#x43A;&#x430; &#x441;&#x43E;&#x43E;&#x431;&#x449;&#x435;&#x43D;&#x438;&#x439; &#x43E;&#x442;&#x43B;&#x438;&#x447;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x438; &#x43A;&#x43E;&#x43D;&#x446;&#x435;&#x43F;&#x442;&#x443;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; <br /> - &#x41A;&#x43E;&#x434; &#x43D;&#x435; &#x432;&#x44B;&#x437;&#x43E;&#x432;&#x435;&#x442; &#x43E;&#x448;&#x438;&#x431;&#x43E;&#x43A; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x446;&#x438;&#x438;/&#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F; (id array) <br /> - &#x421;&#x432;&#x44F;&#x437;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x435; &#x432;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x44F; &#x432;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x44F;
  • - &#x422;&#x43E;&#x442; &#x436;&#x435; &#x43A;&#x43E;&#x434;, &#x43D;&#x43E; &#x442;&#x435;&#x43F;&#x435;&#x440;&#x44C; &#x43D;&#x435;&#x438;&#x437;&#x432;&#x435;&#x441;&#x442;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434; <br /> - &#x41A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x442;&#x43E;&#x440; &#x432;&#x44B;&#x434;&#x430;&#x441;&#x442; &#x442;&#x43E;&#x43B;&#x44C;&#x43A;&#x43E; warning, &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430; &#x43C;&#x43E;&#x436;&#x435;&#x442; &#x431;&#x44B;&#x442;&#x44C; &#x432; &#x440;&#x430;&#x43D;&#x442;&#x430;&#x439;&#x43C;&#x435;
  • - &#x418;&#x442;&#x430;&#x43A;, &#x43F;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x43C; &#x43E; &#x440;&#x430;&#x43D;&#x442;&#x430;&#x439;&#x43C;&#x435; <br /> - &#x412;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x442; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x43A;&#x430; &#x43A; &#x43F;&#x440;&#x435;&#x434;&#x43A;&#x443; <br /> - &#x41F;&#x43E;&#x438;&#x441;&#x43A; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; &#x43D;&#x435; &#x43F;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x438;, &#x430; &#x43F;&#x43E; &#x441;&#x435;&#x43B;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x443; - &#x443;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; id &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; <br /> - &#x41A;&#x430;&#x43A; &#x432;&#x438;&#x434;&#x438;&#x442;&#x435;, &#x43A;&#x43B;&#x430;&#x441;&#x441; - &#x44D;&#x442;&#x43E; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;
  • - &#x418;&#x442;&#x430;&#x43A;, &#x43F;&#x43E;&#x433;&#x43E;&#x432;&#x43E;&#x440;&#x438;&#x43C; &#x43E; &#x440;&#x430;&#x43D;&#x442;&#x430;&#x439;&#x43C;&#x435; <br /> - &#x412;&#x44B;&#x43F;&#x43E;&#x43B;&#x43D;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x442; &#x43F;&#x43E;&#x442;&#x43E;&#x43C;&#x43A;&#x430; &#x43A; &#x43F;&#x440;&#x435;&#x434;&#x43A;&#x443; <br /> - &#x41F;&#x43E;&#x438;&#x441;&#x43A; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; &#x43D;&#x435; &#x43F;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x438;, &#x430; &#x43F;&#x43E; &#x441;&#x435;&#x43B;&#x435;&#x43A;&#x442;&#x43E;&#x440;&#x443; - &#x443;&#x43D;&#x438;&#x43A;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; id &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; <br /> - &#x41A;&#x430;&#x43A; &#x432;&#x438;&#x434;&#x438;&#x442;&#x435;, &#x43A;&#x43B;&#x430;&#x441;&#x441; - &#x44D;&#x442;&#x43E; &#x43E;&#x431;&#x44A;&#x435;&#x43A;&#x442;
  • - &#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43F;&#x43E;&#x43B;&#x443;&#x447;&#x438;&#x442;&#x44C; &#x43A;&#x43B;&#x430;&#x441;&#x441; &#x438; &#x432;&#x44B;&#x437;&#x44B;&#x432;&#x430;&#x442;&#x44C; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x44B; &#x443; &#x43D;&#x435;&#x433;&#x43E;, &#x438;&#x43B;&#x438; &#x43F;&#x43E; &#x438;&#x43C;&#x435;&#x43D;&#x438; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;
  • - &#x424;&#x430;&#x431;&#x440;&#x438;&#x447;&#x43D;&#x44B;&#x439; &#x43C;&#x435;&#x442;&#x43E;&#x434; <br /> - &#x420;&#x435;&#x433;&#x438;&#x441;&#x442;&#x440;&#x438;&#x443;&#x435;&#x43C; &#x43A;&#x43B;&#x430;&#x441;&#x441; &#x443;&#x437;&#x43B;&#x430; &#x434;&#x435;&#x440;&#x435;&#x432;&#x430; &#x438; &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x435;&#x43C; <br /> - isSubclassOfClass: - &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x440; &#x43C;&#x435;&#x442;&#x43E;&#x434;&#x430; introspection <br /> - &#x414;&#x430;&#x43B;&#x44C;&#x448;&#x435; &#x432; &#x43A;&#x43E;&#x434;&#x435; &#x441;&#x43E;&#x437;&#x434;&#x430;&#x441;&#x442;&#x441;&#x44F; &#x438;&#x43D;&#x441;&#x442;&#x430;&#x43D;&#x441; &#x434;&#x440;&#x443;&#x433;&#x43E;&#x433;&#x43E; &#x43A;&#x43B;&#x430;&#x441;&#x441;&#x430;

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

  • 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
  • Благодарю за внимание