2. В программе
• Objective C
• Foundation and Memory Management
• Views and View Controllers
• Interface builder
• Networking
• Web services, JSON
• ...
5. Кратко
• Основные особенности языка
• Объявления и определения классов
• Инициализация и деинициализация
• Управление памятью
• Properties
• Стандартные классы
• Стиль форматирования и именование
• Практика: простенькое приложеньеце
12. Расширение C
• Можно использовать базовые типы,
массивы и структуры
• Можно вызывать функции
• Можно работать с указателями
• ...
13. Совместимость с C++
• Objective C класс может ссылаться на
C++ и наоборот
• В теле методов можно вызывать методы
как Objective C классов, так и C++
• Objective C классы могут быть
использованы в качестве аргументов
шаблонов
15. Классы и объекты
• NSObject *obj
• NSString *str, NSArray *arr, UIView *view
16. Динамическая
типизация
• Динамическое связывание
• id
• При невозможности проверить наличие
метода - предупреждение, а не ошибка
• Сообщения
• Возможность интроспекции
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 }
35. Объявление
Тип возвращаемого
Тип аргумента Тип аргумента
значения
- (void)print:(NSString *)a b:(int)b;
Non-static Имя функции
метод print:b:
36. Объявление
Тип возвращаемого
Тип аргумента Тип аргумента
значения
- (void)print:(NSString *)a b:(int)b;
Non-static Имя функции Имена
метод print:b: аргументов
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
100. Стиль форматирования
@interface NSString : NSObject {
}
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
@end
Звездочка рядом с
Пробел только здесь переменной, а не с типом, как
принято в C/C++
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
}
107. Кратко
• Основные особенности языка
• Объявления и определения классов
• Инициализация и деинициализация
• Управление памятью
• Properties
• Стандартные классы
• Стиль форматирования и именование
• Практика: простенькое приложеньеце
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
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 {
... Важно! Помним про
составные имена методов
}
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 для вызова
134. Ключевое слово
Протоколы
@protocol
Объявляет только
методы, скобок нет
@protocol OrderProcessorDelegate
- (void)orderProcessed;
@optional
- (void)orderProcessedWithError:(NSError *)err;
@end
135. Ключевое слово
Протоколы
@protocol
Объявляет только
методы, скобок нет
@protocol OrderProcessorDelegate
- (void)orderProcessed;
Можно указать
опциональные методы
@optional
- (void)orderProcessedWithError:(NSError *)err;
@end
137. Протоколы
OrderProcessorClient.h Поддержка протокола
указывается в <скобках>
@interface OrderProcessorClient :
NSObject<OrderProcessorDelegate> {
}
...
@end
138. Протоколы
OrderProcessorClient.h Поддержка протокола
указывается в <скобках>
@interface OrderProcessorClient :
NSObject<OrderProcessorDelegate> {
}
...
@end Методы повторно объявлять
не нужно