Кратко о Mac OS X

56
Программирование Mac OS

Transcript of Кратко о Mac OS X

Page 1: Кратко о Mac OS X

Программирование Mac OS

Page 2: Кратко о Mac OS X

Steven Jobs & Stephen Wozniak

Page 3: Кратко о Mac OS X

История 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

млн

Page 4: Кратко о Mac OS X

История 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)

Page 5: Кратко о Mac OS X

Mac OS 1 (1984)

Page 6: Кратко о Mac OS X

Mac OS 6 (1988)

Page 7: Кратко о Mac OS X

Mac OS 7 (1991)

Page 8: Кратко о Mac OS X

Mac OS 7.5 (1994)

Page 9: Кратко о Mac OS X

Mac OS 8.5 (1998)

Page 10: Кратко о Mac OS X

Mac OS 9 (1999)

Page 11: Кратко о Mac OS X

Mac OS 10 (2001)

Page 12: Кратко о Mac OS X

Mac OS 10.6 (2009)

Page 13: Кратко о Mac OS X

Hackintosh (2006)

Mac OS 10.4.4 и старше

Патчи к XNU

Page 14: Кратко о Mac OS X

MessagePad

Page 15: Кратко о Mac OS X

MessagePad & iPhone

Page 16: Кратко о Mac OS X

Особенности Mac OS X

Darwin: XNU + набор драйверов и утилит

XNU: ядро Mach + BSD APIФреймворки Cocoa, Carbon и JavaТехнологии QuickTime, Quartz и

OpenGLТема Aqua

Page 17: Кратко о Mac OS X

Архитектурная модель

Aqua

Darwin

Quartz OpenGL QuickTime

Carbon Cocoa Java

GUI

Фреймворки

Технологии

Ядро

Page 18: Кратко о Mac OS X

XNU = Mach + BSD

Mach:- виртуальная память- RPC- вытесняющее

планирование и SMP- защита памяти- IPC

BSD:- POSIX интерфейс- сигналы- стек TCP\IP- VFS

Page 19: Кратко о Mac OS X

И еще раз…

Page 20: Кратко о Mac OS X

Toolkit

GCC

GDB

Make

Libtool

Otool

Page 21: Кратко о Mac OS X

Компиляция из командной строки

Page 22: Кратко о Mac OS X

Bundle

Page 23: Кратко о Mac OS X

XCode

Page 24: Кратко о Mac OS X

Interface Builder

Page 25: Кратко о Mac OS X

developer.apple.com

Page 26: Кратко о Mac OS X

Objective-C

Надмножество СОчень простой язык, но новый

синтаксисОдиночное наследование, единый

базовый классЕсть понятие интерфейса

(абстрактный класс)Методы бывают либо

виртуальные либо статическиеСлабо типизирован

Page 27: Кратко о Mac OS X

Objective-C

Новые типы:- анонимный объект (id)- класс (Class)- селектор (SEL)

Синтаксис объявления и определения класса

Синтаксис вызова метода

Page 28: Кратко о Mac OS X

Objective-C

Все динамично:- объекты создаются в куче- нет стековых объектов

Методы связываются динамически

Присутствует интроспекция

Page 29: Кратко о Mac OS X

Создание объекта из класса

Page 30: Кратко о Mac OS X

Objective-C

Классы определяют состояние и поведение

Состояние определяется инвариантами

Поведение – методамиМенять состояние можно

методами доступа (accessors)

Page 31: Кратко о Mac OS X

Objective-C

Объекты отвечают на методы объекта:- (id)init;- (float)height;- (void)walk;

Классы отвечают на методы классов:+ (id)alloc;+ (id)person;+ (Person *)sharedPerson;

Page 32: Кратко о Mac OS X

Objective-C

Синтаксис вызова метода (посылки сообщения):

[receiver message][receiver message: argument][receiver message: arg1 andArg: arg2]

Page 33: Кратко о Mac OS X

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];

Page 34: Кратко о Mac OS X

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;

Page 35: Кратко о Mac OS X

Objective-C

Нулевой указатель:

if (nil == person) return;if (!person) return;

person = nil; [button setTarget: nil];

person = nil;[person die];

Page 36: Кратко о Mac OS X

Objective-C

Макросы для типа BOOL:

BOOL flag = NO;

if (flag) return;else flag = YES

flag = 1;

if (flag) return;else flag = 0;

Page 37: Кратко о Mac OS X

Objective-C

Тип SEL как указатель на метод:

SEL action = [button action];[button setAction: @selector(start:)];

Для методов из нескольких слов:

- (void)setName: (NSString *)name age: (int)age;SEL sel = @selector(setName:age:);

Page 38: Кратко о Mac OS X

Objective-C

Можно определить, отвечает ли объект на некоторое сообщение:

id obj;SEL selector = @selector(start:);

if ([obj respondsToSelector: selector])[obj performSelector: selector withObjects:

self] ;

Page 39: Кратко о Mac OS X

Objective-C

Сравнение указателей:

if (obj1 == obj2)NSLog(@”Same exact object instance”);

Сравнение состояний:

if ([obj1 isEqual: obj2])NSLog(@”Logically equivalent”);

Page 40: Кратко о Mac OS X

Objective-C

Специальный метод-описание:

- (NSString *)description;

Используется в форматной строке:

[NSString stringWithFormat: @”Object description: %@”, myObject];NSLog([anObject description]);

Page 41: Кратко о Mac OS X

Foundation Framework

Содержит классы для АТДЗадачи, таймера, нитиРабота с файлами, IPC, bundleNSObject:

- всеобщий базовый класс- управление памятью- сравнение объектов- интроспекция

Page 42: Кратко о Mac OS X

Foundation Контейнеры

NSArray - упорядоченный массив объектов

NSDictionary – ключ-значениеNSSet – множество уникальных

объектовЕдиный механизм перечисленияКонстантные и изменяемые

классыNSMutableArray, NSMutableDictionary, NSMutableSet

Page 43: Кратко о Mac OS X

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);

Page 44: Кратко о Mac OS X

Файлы описания классов

Page 45: Кратко о Mac OS X

Объявление класса

Page 46: Кратко о Mac OS X

Определение методов доступа

Page 47: Кратко о Mac OS X

Вызов собственных методов

Page 48: Кратко о Mac OS X

Вызов методов родителя

self – аналог thissuper – псевдоним объекта-

родителя

- (void)doSomething{

[super doSomething];//…

}

Page 49: Кратко о Mac OS X

Создание объекта

+ alloc – выделение памяти для объекта некоторого класса (увеличивается счетчик ссылок)

- init – вызов конструктора

MyClass *object = [[MyClass alloc] init];

Page 50: Кратко о Mac OS X

Реализация конструктора

Page 51: Кратко о Mac OS X

Сбалансированные вызовы

Page 52: Кратко о Mac OS X

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

Page 53: Кратко о Mac OS X

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

Page 54: Кратко о Mac OS X

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

Page 55: Кратко о Mac OS X

Реализация деструктора

Page 56: Кратко о Mac OS X

Вопросы?