Objective-C 2.0
Краткое описание языка и среды исполнения
План доклада

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

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

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

•   Метаинформация (...
Основыные
       характеристики
•   Надмножество языка Си

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

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

•   Среда выпо...
Пример кода
 1.   #import <Foundation/Foundation.h>
 2.
 3.   @interface TreeNode : NSObject {
 4.     TreeNode *left;
 5....
1.   @implementation TreeNode
 2.
 3.   @synthesize left, right, value;
 4.
 5.   + (id)nodeWithValue:(int)value {
 6.    ...
Что общего с C++ и К

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

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

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

•   Облас...
Различия: Посылка
     сообщения в nil
      1.   - (void)traverseWithArray:(NSMutableArray *)array {
      2.     [array ...
Различия: Посылка
     сообщения в nil
      1.   - (void)traverseWithArray:(NSMutableArray *)array {
      2.     [array ...
Различия: Categories
 1.   @interface TreeNode(MoreTraversal)
 2.
 3.   - (void)inorderTraverseWithArray:(NSMutableArray *...
Различия
•   Сообщение в nil

•   Categories

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

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

•   NSObject - “н...
Управление памятью

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

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

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

1.   NSArray *array = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
2.   NSString *d...
Управление памятью
     1.   + (id)nodeWithValue:(int)value {
     2.     return [[[self alloc] initWithValue:value] autor...
Управление памятью
     1.   + (id)nodeWithValue:(int)value {
     2.     return [[[self alloc] initWithValue:value] autor...
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithVal...
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithVal...
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithVal...
Отсылка сообщений
        1.   TreeNode *root = [TreeNode nodeWithValue:1];
        2.   root.left = [TreeNode nodeWithVal...
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




               ...
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




               ...
Отсылка сообщений
superclass
SEL -> address   SEL selector = @selector(nodeWithValue:);
SEL -> address




               ...
Introspection

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

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

•   Функции, ...
Introspection
 1.   static Class nodeClass;
 2.
 3.   //...
 4.
 5.   + (id)nodeWithValue:(int)value {
 6.     Class cls =...
Интеграция с C/C++
•   Objective-C (.m) & C++ == Objective-C++
    (.mm)

•   Можно: Использовать C/C++ код в классе
    O...
Прочее

•   Runtime Method Resolution
    (resolveInstanceMethod:)

•   Message Forwarding (forwardInvocation:)

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


•   The Objective-C 2.0 Programming Language

•   Objective-C 2.0 Runtime Programming Guide

•   Learn Object...
Об авторе


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

•   dev.oyster@gmail.com
Благодарю за внимание
Upcoming SlideShare
Loading in...5
×

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

2,665

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,665
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
25
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • - &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
  • - &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;
  • - #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;
  • - &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;
  • - &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
  • - &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
  • - &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;
  • - &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;
  • - &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;
  • - &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;
  • - &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
  • - &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;
  • - &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;
  • - &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;
  • - &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;
  • - &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;
  • - &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;
  • Objective-C 2.0: краткое описание языка и рантайма

    1. 1. Objective-C 2.0 Краткое описание языка и среды исполнения
    2. 2. План доклада • Основные характеристики и синтаксис • Управление памятью • Отсылка сообщений • Метаинформация (Introspection) • Интеграция с C/C++
    3. 3. Основыные характеристики • Надмножество языка Си • Объектно-ориентированный • Компилируемый • Среда выполнения • Нет сборщика мусора
    4. 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. 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. 6. Что общего с C++ и К • Си-подобный синтаксис • Классы, методы, свойства, поля • Интерфейсы (@protocol) • Область видимости (@private, @public...) • Исключения (@throw, @try...)
    7. 7. Различия: Посылка сообщения в nil 1. - (void)traverseWithArray:(NSMutableArray *)array { 2. [array addObject:[NSNumber numberWithInt:value]]; 3. [left traverseWithArray:array]; 4. [right traverseWithArray:array]; 5. } • Не приводит к ошибке • Возвращается “значение по умолчанию”
    8. 8. Различия: Посылка сообщения в nil 1. - (void)traverseWithArray:(NSMutableArray *)array { 2. [array addObject:[NSNumber numberWithInt:value]]; 3. [left traverseWithArray:array]; 4. [right traverseWithArray:array]; 5. } • Не приводит к ошибке • Возвращается “значение по умолчанию”
    9. 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. 10. Различия • Сообщение в nil • Categories • Нет @virtual, нет @abstract • Нет пространств имен • NSObject - “необязательный” базовый класс
    11. 11. Управление памятью • Нет сборки мусора • Подсчет ссылок • Вызываемый код ответственен за освобождение памяти, кроме alloc, new, copy
    12. 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. 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. 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. 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. 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. 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. 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. 19. Отсылка сообщений superclass SEL -> address SEL selector = @selector(nodeWithValue:); SEL -> address • superclass SEL -> address SEL -> address Диспетчеризация во время исполнения isa • SEL - уникальный field1 field2 идентификатор метода
    20. 20. Отсылка сообщений superclass SEL -> address SEL selector = @selector(nodeWithValue:); SEL -> address • superclass SEL -> address SEL -> address Диспетчеризация во время исполнения isa • SEL - уникальный field1 field2 идентификатор метода
    21. 21. Отсылка сообщений superclass SEL -> address SEL selector = @selector(nodeWithValue:); SEL -> address • superclass SEL -> address SEL -> address Диспетчеризация во время исполнения isa • SEL - уникальный field1 field2 идентификатор метода
    22. 22. Introspection • Класс - это метаобъект • NSObject содержит методы для получения информации о типе • Функции, начинающиеся с class_, также возвращают информацию о типе
    23. 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. 24. Интеграция с C/C++ • Objective-C (.m) & C++ == Objective-C++ (.mm) • Можно: Использовать C/C++ код в классе Objective-C и наоборот (в теле метода, в поле класса) • Нельзя: Наследовать класс C++ от класса Objective-C и наоборот
    25. 25. Прочее • Runtime Method Resolution (resolveInstanceMethod:) • Message Forwarding (forwardInvocation:) • And more...
    26. 26. Литература • The Objective-C 2.0 Programming Language • Objective-C 2.0 Runtime Programming Guide • Learn Objective-C on the Mac (Apress)
    27. 27. Об авторе • Андрей Козачук, Stella Systems • dev.oyster@gmail.com
    28. 28. Благодарю за внимание
    1. ¿Le ha llamado la atención una diapositiva en particular?

      Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

    ×