занятие 1

1,209 views

Published on

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

No Downloads
Views
Total views
1,209
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

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
  • занятие 1

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

    ×