Your SlideShare is downloading. ×
занятие 1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

занятие 1

960
views

Published on

Published in: Spiritual, Technology, Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
960
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • вызов функции ~ отправка сообщения\nobj = nil, ничего не упадет\n
  • вызов функции ~ отправка сообщения\nobj = nil, ничего не упадет\n
  • вызов функции ~ отправка сообщения\nobj = nil, ничего не упадет\n
  • вызов функции ~ отправка сообщения\nobj = nil, ничего не упадет\n
  • вызов функции ~ отправка сообщения\nobj = nil, ничего не упадет\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Программирование под iOS
    • 2. В программе• Objective C• Foundation and Memory Management• Views and View Controllers• Interface builder• Networking• Web services, JSON• ...
    • 3. Организация занятий• Немного теории• Много практики
    • 4. Занятие 1Objective C как очередной язык
    • 5. Кратко• Основные особенности языка• Объявления и определения классов• Инициализация и деинициализация• Управление памятью• Properties• Стандартные классы• Стиль форматирования и именование• Практика: простенькое приложеньеце
    • 6. Кратко• Селекторы• Протоколы• Делегаты• Практика: xml parsing
    • 7. iOS Developer Library• Guides • View Controller Guide for iOS • Table View Programming Guide for iOS • ...• References • UIView • UIViewController • ...
    • 8. Что является основныминструментом разработчика?
    • 9. Google
    • 10. Основные особенности Objective C
    • 11. Основные особенности• Расширение C• Совместимость с C++• Динамическая типизация• Управление памятью
    • 12. Расширение C• Можно использовать базовые типы, массивы и структуры• Можно вызывать функции• Можно работать с указателями• ...
    • 13. Совместимость с C++• Objective C класс может ссылаться на C++ и наоборот• В теле методов можно вызывать методы как Objective C классов, так и C++• Objective C классы могут быть использованы в качестве аргументов шаблонов
    • 14. Элементарные типы• int, unsigned int• NSInteger, NSUInteger
    • 15. Классы и объекты• NSObject *obj• NSString *str, NSArray *arr, UIView *view
    • 16. Динамическая типизация• Динамическое связывание• id• При невозможности проверить наличие метода - предупреждение, а не ошибка• Сообщения• Возможность интроспекции
    • 17. Классы и методы
    • 18. Исходные файлы• Order.h - объявление• Order.m - определение
    • 19. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{}@end }
    • 20. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{}@end }
    • 21. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{}@end }
    • 22. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}@end }
    • 23. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}@end }
    • 24. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 25. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 26. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 27. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 28. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 29. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 30. ОбъявлениеObjective C Java@interface Printer : Staff { class Printer extends Staff{  int pages;   int pages;}- (void)print:(NSString *)a b:(int)b;   public void print(String a, int b) {   };@end }
    • 31. Объявление- (void)print:(NSString *)a b:(int)b;
    • 32. Объявление - (void)print:(NSString *)a b:(int)b;Non-static метод
    • 33. ОбъявлениеТип возвращаемого значения - (void)print:(NSString *)a b:(int)b;Non-static метод
    • 34. ОбъявлениеТип возвращаемого значения - (void)print:(NSString *)a b:(int)b;Non-static Имя функции метод
    • 35. ОбъявлениеТип возвращаемого Тип аргумента Тип аргумента значения - (void)print:(NSString *)a b:(int)b;Non-static Имя функции метод print:b:
    • 36. ОбъявлениеТип возвращаемого Тип аргумента Тип аргумента значения - (void)print:(NSString *)a b:(int)b;Non-static Имя функции Имена метод print:b: аргументов
    • 37. ОпределениеObjective C Java@implementation Printer@end
    • 38. Определение Objective C Java@implementation Printer- (void)print:(NSString *)a b:(int)b { public void print(String a, int b){     }   };@end
    • 39. Определение Objective C Java@implementation Printer- (void)print:(NSString *)a b:(int)b { public void print(String a, int b){     }   };@end
    • 40. Вызов методов Objective C Java[obj print]; obj.print();[obj printData:data]; obj.printData(data);[obj printData:data withFormat:frm]; obj.printDataWithFormat(data, frm)
    • 41. Цепочка вызовов Objective C Java[[[view show] hide] showAgain]; view.show().hide().showAgain();[[obj dict] obj.getDict(). objectForKey:[NSNumber intValue]]; getObjectForKey(num.intValue());
    • 42. Статические функцииObjective C Java class Printer extends Staff{@interface Printer : Staff {}   public static Object+ (id)sharedPrinter; getSharedPrinter {   };@end }
    • 43. SingletoneObjective Cstatic Printer* sharedPrinter_;+ (id)sharedPrinter { if (sharedPrinter_ == nil) { sharedPrinter_ = [[Printer alloc] init]; } return sharedPrinter_;}
    • 44. “Конструктор” и “деструктор”
    • 45. - (id)init { self = [super init]; if (self != nil) { ... } return self;}- (void)dealloc { ... [super dealloc];}
    • 46. Произвольный тип- (id)init { self = [super init]; if (self != nil) { ... } return self;}- (void)dealloc { ... [super dealloc];}
    • 47. Произвольный тип Родительский объект- (id)init { self = [super init]; if (self != nil) { ... } return self;}- (void)dealloc { ... [super dealloc];}
    • 48. Произвольный тип Родительский объект- (id)init { self = [super init]; if (self != nil) { ... Инициализация } return self;}- (void)dealloc { ... [super dealloc];}
    • 49. Произвольный тип Родительский объект- (id)init { self = [super init]; if (self != nil) { ... Инициализация } return self;} Текущий объект (this)- (void)dealloc { ... [super dealloc];}
    • 50. Произвольный тип Родительский объект- (id)init { self = [super init]; if (self != nil) { ... Инициализация } return self;} Текущий объект (this)- (void)dealloc { Зарезервированное имя ... [super dealloc];}
    • 51. Произвольный тип Родительский объект- (id)init { self = [super init]; if (self != nil) { ... Инициализация } return self;} Текущий объект (this)- (void)dealloc { Зарезервированное имя ... [super dealloc]; Освобождение} ресурсов
    • 52. Создание Objective C JavaTestClass *obj = [[TestClass alloc] init]; TestClass obj = new TestClass();
    • 53. Инициализаторы- (id)initWithThis:(NSObject *)this;- (id)initWithThat:(NSObject *)that;- (id)initWithThis:(NSObject *)this andThat:(NSObject *)that;
    • 54. Управление памятью
    • 55. Reference counting• alloc +1• retain +1• release -1 • при 0 вызывается dealloc• retainCount
    • 56. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0
    • 57. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0[order retainCount]: 1
    • 58. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0[order retainCount]: 2
    • 59. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0[order retainCount]: 1
    • 60. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0[order retainCount]: 0
    • 61. Управление памятьюOrder *order = [[Order alloc] init]; 1[order retain]; 2[order release]; 1[order release]; 0
    • 62. Autorelease pool• NSAutoreleasePool• [object autorelease]• [pool drain]
    • 63. Autorelease pool pool
    • 64. Autorelease pool[object autorelease] pool
    • 65. Autorelease pool[object autorelease] retain pool object
    • 66. Autorelease pool pool object
    • 67. Autorelease pool[pool drain] pool object
    • 68. Autorelease pool[pool drain] release pool object
    • 69. Autorelease pool- (void)buttonTouched { Order* order = [[Order alloc] init]; ... [order release];}
    • 70. Autorelease pool- (void)buttonTouched { Order* order = [[[Order alloc] init] autorelease]; ...}
    • 71. Static initializersNSArray *array = [[[NSArray] alloc] init] autorelease];
    • 72. Static initializersNSArray *array = [NSArray array];
    • 73. Autorelease pool- (void)f { NSAray *array = [self itemsList]; [array doSomething];}
    • 74. Autorelease pool- (void)f { NSAray *array = [self itemsList]; - (NSArray *)itemsList { [[[NSArray alloc] init] autorelease]; ... return array; } [array doSomething];}
    • 75. Properties
    • 76. Properties (dot notation)NSArray *itemsList = [order itemsList];[order setItemsList:itemsList];
    • 77. Properties (dot notation)NSArray *itemsList = order.itemsList;order.itemsList = itemsList; Появилось в Objective C 2.0
    • 78. Properties (dot notation)NSArray *itemsList = order.itemsList;order.itemsList = itemsList; Вызывает [order itemsList]; Появилось в Objective C 2.0
    • 79. Properties (dot notation)NSArray *itemsList = order.itemsList;order.itemsList = itemsList; Вызывает [order itemsList]; Вызывает [order setItemsList]; Появилось в Objective C 2.0
    • 80. Properties (dot notation)order.itemsList@interface Order : NSObject {}@end
    • 81. Properties (dot notation)order.itemsList ~ [order itemsList]@interface Order : NSObject { NSArray *itemsList}@end
    • 82. Properties (dot notation)order.itemsList ~ [order itemsList]@interface Order : NSObject { NSArray *itemsList} -(NSArray *)itemsList; -(void)setItemsList:(NSArray *)itemsList;@end
    • 83. Properties (dot notation)order.itemsList ~ [order itemsList]@interface Order : NSObject { NSArray *itemsList}@property (...) NSArray *itemsList;@end
    • 84. Properties (dot notation)@implementation Order@end
    • 85. Properties (dot notation)@implementation Order- (NSArray *)itemsList {}- (void)itemsList:(NSArray *)itemsList {}@end
    • 86. Properties (dot notation)@implementation Order- (NSArray *)itemsList { return self->itemsList;}- (void)itemsList:(NSArray *)itemsList { self->itemsList = itemsList;}@end
    • 87. Properties (dot notation)@implementation Order@synthesize itemsList;@end
    • 88. Properties (dot notation)@property (retain) NSArray *itemsList;@property (assign) int count;@property (readonly, retain) NSArray *itemsList;@property (copy) NSString *string;
    • 89. Properties (dot notation)Order.h@interface Order : NSObject { NSArray *itemsList}@property (retain) NSArray *itemsList;@endOrder.m@implementation Order@synthesize itemsList;@end
    • 90. Стандартные классы
    • 91. NSStringNSString *string = @”static string”;NSString *formatString = [NSString stringWithFormat:@”%d - %@”, count, description];
    • 92. NSNumberNSNumber *num = [NSNumber numberWithInt:5];NSInteger intNum = [num intValue];
    • 93. NSArrayNSArray *array = [NSArray array]; // alloc, init, a/rNSUInteger count = [array count];Order *order = (Order *)[array objectAtIndex:0];for (Order* order in array) { ...}
    • 94. NSMutableArrayNSMutableArray *itemsList = [NSMutableArray array];[itemsList addObject:item];[itemsList removeObject:item];
    • 95. NSDictionaryNSDictionary *dict = [order someDictionary];NSNumber *count = [dict objectForKey:@”fruits”];if (![[dict allKeys] contains:@”testKey”]) ...for (NSString *key in dict) { id value = [dict objectForKey:key];}
    • 96. NSMutableDictionaryNSMutableDictionary *dict = [NSMutableDictionary dictonary];[dict setObject:obj forKey:@”test”];[dict removeObjectForKey: [NSNumber numberWithInt:5]];
    • 97. Стильформатирования
    • 98. Стиль форматирования@interface NSString : NSObject {}- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;@end
    • 99. Стиль форматирования@interface NSString : NSObject {}- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;@endПробел только здесь
    • 100. Стиль форматирования@interface NSString : NSObject {}- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;@end Звездочка рядом сПробел только здесь переменной, а не с типом, как принято в C/C++
    • 101. Стиль форматирования- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc { if (member != nil) { for (NSNumber *num in array) { [num stringValue]; } }}
    • 102. Стиль форматирования Пробел только здесь- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc { if (member != nil) { for (NSNumber *num in array) { [num stringValue]; } }}
    • 103. Стиль форматирования Открывающая скобка на Пробел только здесь той же строке- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc { if (member != nil) { for (NSNumber *num in array) { [num stringValue]; } }}
    • 104. Стиль форматирования Открывающая скобка на Пробел только здесь той же строке- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc { if (member != nil) { for (NSNumber *num in array) { [num stringValue]; } } В именах функций и переменных camel-case}
    • 105. Стиль форматирования Открывающая скобка на Пробел только здесь той же строке- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc { if (member != nil) { for (NSNumber *num in array) { [num stringValue]; Приняты длинные имена } } В именах функций и переменных camel-case}
    • 106. Стиль форматирования• Coding Guidelines for Cocoa• Стандартные заголовочные файлы
    • 107. Кратко• Основные особенности языка• Объявления и определения классов• Инициализация и деинициализация• Управление памятью• Properties• Стандартные классы• Стиль форматирования и именование• Практика: простенькое приложеньеце
    • 108. XCode Demo
    • 109. ПрактикаOrder  NSUInteger orderId  NSMutableArray *itemsOrderItem  NSString *description  NSUInteger priceOrdersManager  - (NSArray *)createOrders;  - (void)printOrders; // NSLog(...)
    • 110. Кратко• Селекторы• Протоколы• Делегаты
    • 111. Селекторы
    • 112. Селекторы• Аналог указателя на функцию• SEL s = @selector(<method name>)• [obj performSelector:s]
    • 113. СелекторыOrderProcessor OrderProcessor Client
    • 114. СелекторыOrderProcessor OrderProcessor Client - processOrder
    • 115. СелекторыOrderProcessor OrderProcessor Client - processOrder
    • 116. СелекторыOrderProcessor.h@interface OrderProcessor : NSObject { id target; SEL callback;}- (void)processData:(NSData *)data target:(id)target selector:(SEL)selector;@end
    • 117. Вызываемый класс СелекторыOrderProcessor.h@interface OrderProcessor : NSObject { id target; SEL callback;}- (void)processData:(NSData *)data target:(id)target selector:(SEL)selector;@end
    • 118. Вызываемый класс СелекторыOrderProcessor.h@interface OrderProcessor : NSObject { id target; SEL callback;} Объявление типа селектора- (void)processData:(NSData *)data target:(id)target selector:(SEL)selector;@end
    • 119. Вызываемый класс СелекторыOrderProcessor.h@interface OrderProcessor : NSObject { id target; SEL callback;} Объявление типа селектора Функция обработки- (void)processData:(NSData *)data принимает ссылку на target:(id)target объект ... selector:(SEL)selector;@end
    • 120. Вызываемый класс СелекторыOrderProcessor.h@interface OrderProcessor : NSObject { id target; SEL callback;} Объявление типа селектора Функция обработки- (void)processData:(NSData *)data принимает ссылку на target:(id)target объект ... selector:(SEL)selector; ... и на селектор@end
    • 121. СелекторыOrderProcessorClient.m- (void)f { [orderProcessor processData:data target:self selector:@selector(orderProcessed:)];}- (void)orderProcessed:(id)source { ...}
    • 122. Вызывающий класс СелекторыOrderProcessorClient.m- (void)f { [orderProcessor processData:data target:self selector:@selector(orderProcessed:)];}- (void)orderProcessed:(id)source { ...}
    • 123. Вызывающий класс СелекторыOrderProcessorClient.m Передает себя в качестве объекта- (void)f { [orderProcessor processData:data target:self selector:@selector(orderProcessed:)];}- (void)orderProcessed:(id)source { ...}
    • 124. Вызывающий класс СелекторыOrderProcessorClient.m Передает себя в качестве объекта- (void)f { [orderProcessor processData:data target:self selector:@selector(orderProcessed:)];} и селектор на метод orderProcessed- (void)orderProcessed:(id)source { ...}
    • 125. Вызывающий класс СелекторыOrderProcessorClient.m Передает себя в качестве объекта- (void)f { [orderProcessor processData:data target:self selector:@selector(orderProcessed:)];} и селектор на метод orderProcessed- (void)orderProcessed:(id)source { ... Важно! Помним про составные имена методов}
    • 126. СелекторыOrderProcessor.m- (void)processData:(NSData *)data target:(id)aTarget selector:(SEL)aSelector { target = aTarget; selector = aSelector; ... [target performSelector:selector];}
    • 127. Вызывемый класс СелекторыOrderProcessor.m- (void)processData:(NSData *)data target:(id)aTarget selector:(SEL)aSelector { target = aTarget; selector = aSelector; ... [target performSelector:selector];}
    • 128. Вызывемый класс СелекторыOrderProcessor.m- (void)processData:(NSData *)data target:(id)aTarget selector:(SEL)aSelector { target = aTarget; Можно при необходимости selector = aSelector; сохранить ссылки ... [target performSelector:selector];}
    • 129. Вызывемый класс СелекторыOrderProcessor.m- (void)processData:(NSData *)data target:(id)aTarget selector:(SEL)aSelector { target = aTarget; Можно при необходимости selector = aSelector; сохранить ссылки ... [target performSelector:selector];} Использует метод performSelector для вызова
    • 130. Протоколы
    • 131. Протоколы• Аналог интерфейсов в других языках• Объявляет функции• @protocol• id<ProtocolName>
    • 132. Протоколы@protocol OrderProcessorDelegate- (void)orderProcessed;@optional- (void)orderProcessedWithError:(NSError *)err;@end
    • 133. Ключевое слово Протоколы @protocol@protocol OrderProcessorDelegate- (void)orderProcessed;@optional- (void)orderProcessedWithError:(NSError *)err;@end
    • 134. Ключевое слово Протоколы @protocol Объявляет только методы, скобок нет@protocol OrderProcessorDelegate- (void)orderProcessed;@optional- (void)orderProcessedWithError:(NSError *)err;@end
    • 135. Ключевое слово Протоколы @protocol Объявляет только методы, скобок нет@protocol OrderProcessorDelegate- (void)orderProcessed; Можно указать опциональные методы@optional- (void)orderProcessedWithError:(NSError *)err;@end
    • 136. ПротоколыOrderProcessorClient.h@interface OrderProcessorClient : NSObject<OrderProcessorDelegate> {}...@end
    • 137. ПротоколыOrderProcessorClient.h Поддержка протокола указывается в <скобках>@interface OrderProcessorClient : NSObject<OrderProcessorDelegate> {}...@end
    • 138. ПротоколыOrderProcessorClient.h Поддержка протокола указывается в <скобках>@interface OrderProcessorClient : NSObject<OrderProcessorDelegate> {}...@end Методы повторно объявлять не нужно
    • 139. Протоколыid<OrderProcessorDelegate> dlg = [[OrderProcessorClient alloc] init];[dlg orderProcessed];
    • 140. Протоколы Указатель на протокол объявляется как id<>id<OrderProcessorDelegate> dlg = [[OrderProcessorClient alloc] init];[dlg orderProcessed];
    • 141. Протоколы Указатель на протокол Звездочка не ставится! объявляется как id<>id<OrderProcessorDelegate> dlg = [[OrderProcessorClient alloc] init];[dlg orderProcessed];
    • 142. Делегаты
    • 143. Делегаты• Стандартный паттерн с использованием протокола• Используется в Cocoa• Описывает перечень callback методов
    • 144. Делегаты OrderView DelegateOrderView OrderViewController
    • 145. Делегаты OrderView DelegateOrderView OrderViewController - delegate
    • 146. Делегаты OrderView DelegateOrderView OrderViewController - delegate - showOrder
    • 147. Делегаты OrderView DelegateOrderView OrderViewController - delegate - showOrder
    • 148. ДелегатыOrderView.h@protocol OrderViewDelegate;@interface OrderView : NSObject {...@property (...) id<OrderViewDelegate> delegate;@end@protocol OrderViewDelegate- (void)orderViewWillAppear:(OrderView *)ov;- (void)orderViewDidAppear:(OrderView *)ov;@end
    • 149. Объявляются виспользуемом классе ДелегатыOrderView.h@protocol OrderViewDelegate;@interface OrderView : NSObject {...@property (...) id<OrderViewDelegate> delegate;@end@protocol OrderViewDelegate- (void)orderViewWillAppear:(OrderView *)ov;- (void)orderViewDidAppear:(OrderView *)ov;@end
    • 150. Объявляются виспользуемом классе ДелегатыOrderView.h@protocol OrderViewDelegate; Forward declaration@interface OrderView : NSObject {...@property (...) id<OrderViewDelegate> delegate;@end@protocol OrderViewDelegate- (void)orderViewWillAppear:(OrderView *)ov;- (void)orderViewDidAppear:(OrderView *)ov;@end
    • 151. Объявляются виспользуемом классе ДелегатыOrderView.h@protocol OrderViewDelegate; Forward declaration@interface OrderView : NSObject { Ссылка на делегат...@property (...) id<OrderViewDelegate> delegate;@end@protocol OrderViewDelegate- (void)orderViewWillAppear:(OrderView *)ov;- (void)orderViewDidAppear:(OrderView *)ov;@end
    • 152. Объявляются виспользуемом классе ДелегатыOrderView.h@protocol OrderViewDelegate; Forward declaration@interface OrderView : NSObject { Ссылка на делегат...@property (...) id<OrderViewDelegate> delegate;@end Объявление протокола@protocol OrderViewDelegate- (void)orderViewWillAppear:(OrderView *)ov;- (void)orderViewDidAppear:(OrderView *)ov;@end
    • 153. ДелегатыOrderViewController.h@interface OrderViewController : NSObject<OrderViewDelegate> {...}@end
    • 154. ДелегатыOrderViewController.h Протокол делегата@interface OrderViewController : NSObject<OrderViewDelegate> {...}@end
    • 155. ДелегатыOrderViewController.m@implementation OrderViewController- (id)init { ... OrderView *orderView = [OrderView view]; orderView.delegate = self;}// OrderViewDelegate methods- (void)orderViewWillAppear:(OrderView *)ov {...}@end
    • 156. ДелегатыOrderViewController.m@implementation OrderViewController- (id)init { Создает OrderView ... OrderView *orderView = [OrderView view]; orderView.delegate = self;}// OrderViewDelegate methods- (void)orderViewWillAppear:(OrderView *)ov {...}@end
    • 157. ДелегатыOrderViewController.m@implementation OrderViewController- (id)init { Создает OrderView ... OrderView *orderView = [OrderView view]; orderView.delegate = self; Устанавливает себя в} качестве делегата// OrderViewDelegate methods- (void)orderViewWillAppear:(OrderView *)ov {...}@end
    • 158. ДелегатыOrderViewController.m@implementation OrderViewController- (id)init { Создает OrderView ... OrderView *orderView = [OrderView view]; orderView.delegate = self; Устанавливает себя в} качестве делегата// OrderViewDelegate methods- (void)orderViewWillAppear:(OrderView *)ov {...} Делает что-либо при вызове@end
    • 159. ДелегатыOrderView.m@implementation OrderView- (void)someFunc { [delegate orderViewWillAppear:self]; ... [delegate orderViewDidAppear:self];}@end
    • 160. ДелегатыOrderView.m@implementation OrderView- (void)someFunc { [delegate orderViewWillAppear:self]; ... Вызов методов делегата [delegate orderViewDidAppear:self];}@end
    • 161. Кратко• Селекторы• Протоколы• Делегаты
    • 162. Практика<ordersList> <order id=1> <item price="100.00" title="Помидоры"/> <item price="50.00" title="Кока-кола"/> </order> <order id=2> <item price="70.00" title="Огурцы"/> <item price="50.00" title="Кока-кола"/> </order>..</ordersList>
    • 163. В следующей серии• View• ViewController• Interface Builder• Первое iOS приложение