Upload
anthony-shoumikhin
View
802
Download
0
Tags:
Embed Size (px)
Citation preview
Программирование Mac OS
Steven Jobs & Stephen Wozniak
История Apple
1976 – появился Apple I 1977 – выпуск Apple I I 1979 – начинается работа над
Macintosh 1982 – годовой доход превышает $1
млрд 1984 – в продажу выходит Macintosh 1985 – Jobs уходит и основывает NeXT 1991 – первый ноутбук (PowerBook) 1992 – IBM и Apple создают PowerPC 1995 – годовой доход превышает $11
млрд 1996 – Apple покупает NeXT за $430
млн
История Apple
1997 – Jobs возвращается 1998 – первый iMac 2000 – Aqua интерфейс Март 2001 – Apple выпускает Mac OS X
(Cheetah) и первый iPod Сентябрь 2001 – Mac OS 10.1 (Puma) Август 2002 – Mac OS 10.2 (Jaguar) Октябрь 2003 – Mac OS 10.3 (Panther) Апрель 2005 – Mac OS 10.4 (Tiger) Октябрь 2007 – Mac OS 10.5 (Leopard) Август 2009 – Mac OS 10.6 (Snow
Leopard)
Mac OS 1 (1984)
Mac OS 6 (1988)
Mac OS 7 (1991)
Mac OS 7.5 (1994)
Mac OS 8.5 (1998)
Mac OS 9 (1999)
Mac OS 10 (2001)
Mac OS 10.6 (2009)
Hackintosh (2006)
Mac OS 10.4.4 и старше
Патчи к XNU
MessagePad
MessagePad & iPhone
Особенности Mac OS X
Darwin: XNU + набор драйверов и утилит
XNU: ядро Mach + BSD APIФреймворки Cocoa, Carbon и JavaТехнологии QuickTime, Quartz и
OpenGLТема Aqua
Архитектурная модель
Aqua
Darwin
Quartz OpenGL QuickTime
Carbon Cocoa Java
GUI
Фреймворки
Технологии
Ядро
XNU = Mach + BSD
Mach:- виртуальная память- RPC- вытесняющее
планирование и SMP- защита памяти- IPC
BSD:- POSIX интерфейс- сигналы- стек TCP\IP- VFS
И еще раз…
Toolkit
GCC
GDB
Make
Libtool
Otool
Компиляция из командной строки
Bundle
XCode
Interface Builder
developer.apple.com
Objective-C
Надмножество СОчень простой язык, но новый
синтаксисОдиночное наследование, единый
базовый классЕсть понятие интерфейса
(абстрактный класс)Методы бывают либо
виртуальные либо статическиеСлабо типизирован
Objective-C
Новые типы:- анонимный объект (id)- класс (Class)- селектор (SEL)
Синтаксис объявления и определения класса
Синтаксис вызова метода
Objective-C
Все динамично:- объекты создаются в куче- нет стековых объектов
Методы связываются динамически
Присутствует интроспекция
Создание объекта из класса
Objective-C
Классы определяют состояние и поведение
Состояние определяется инвариантами
Поведение – методамиМенять состояние можно
методами доступа (accessors)
Objective-C
Объекты отвечают на методы объекта:- (id)init;- (float)height;- (void)walk;
Классы отвечают на методы классов:+ (id)alloc;+ (id)person;+ (Person *)sharedPerson;
Objective-C
Синтаксис вызова метода (посылки сообщения):
[receiver message][receiver message: argument][receiver message: arg1 andArg: arg2]
Objective-C
Пример:
Person *voter = [[Person alloc] init];int age = [voter age];[voter setAge: 21]
if ([voter canLegallyVote]){/*do smth*/}
[voter registerForState: @”CA” party: @”Independant”];NSString *name = [[voter spouse] name];
Objective-C
Точечный синтаксис (ObjC 2.0):
float height = [person height];float height = person.height;
[person setHeight: newHeight];person.height = newHeight;
[[person child] setHeight: newHeight];person.child.height = newHeight;
Objective-C
Нулевой указатель:
if (nil == person) return;if (!person) return;
person = nil; [button setTarget: nil];
person = nil;[person die];
Objective-C
Макросы для типа BOOL:
BOOL flag = NO;
if (flag) return;else flag = YES
flag = 1;
if (flag) return;else flag = 0;
Objective-C
Тип SEL как указатель на метод:
SEL action = [button action];[button setAction: @selector(start:)];
Для методов из нескольких слов:
- (void)setName: (NSString *)name age: (int)age;SEL sel = @selector(setName:age:);
Objective-C
Можно определить, отвечает ли объект на некоторое сообщение:
id obj;SEL selector = @selector(start:);
if ([obj respondsToSelector: selector])[obj performSelector: selector withObjects:
self] ;
Objective-C
Сравнение указателей:
if (obj1 == obj2)NSLog(@”Same exact object instance”);
Сравнение состояний:
if ([obj1 isEqual: obj2])NSLog(@”Logically equivalent”);
Objective-C
Специальный метод-описание:
- (NSString *)description;
Используется в форматной строке:
[NSString stringWithFormat: @”Object description: %@”, myObject];NSLog([anObject description]);
Foundation Framework
Содержит классы для АТДЗадачи, таймера, нитиРабота с файлами, IPC, bundleNSObject:
- всеобщий базовый класс- управление памятью- сравнение объектов- интроспекция
Foundation Контейнеры
NSArray - упорядоченный массив объектов
NSDictionary – ключ-значениеNSSet – множество уникальных
объектовЕдиный механизм перечисленияКонстантные и изменяемые
классыNSMutableArray, NSMutableDictionary, NSMutableSet
Foundation Контейнеры
Перечисление элементов контейнера:
NSArray *colors = [NSArray arrayWithObjects: @”Red”, @”Blue”, @”Green”, nil];NSString *color;int count = [colors count];for (i = 0; i < count; ++i ) //old style{
color = [array objectAtIndex: i];NSLog(color);
}
for (Color *color in colors ) //new styleNSLog(color);
Файлы описания классов
Объявление класса
Определение методов доступа
Вызов собственных методов
Вызов методов родителя
self – аналог thissuper – псевдоним объекта-
родителя
- (void)doSomething{
[super doSomething];//…
}
Создание объекта
+ alloc – выделение памяти для объекта некоторого класса (увеличивается счетчик ссылок)
- init – вызов конструктора
MyClass *object = [[MyClass alloc] init];
Реализация конструктора
Сбалансированные вызовы
Управление памятью
Управление памятью
Управление памятью
Реализация деструктора
Вопросы?