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

Содержание

Слайд 2

История возникновения Архитектура Инструменты разработки Язык Библиотеки План

История возникновения
Архитектура
Инструменты разработки
Язык
Библиотеки

План

Слайд 3

Steven Jobs & Stephen Wozniak

Steven Jobs & Stephen Wozniak

Слайд 4

История Apple 1976 – появился Apple I 1977 – выпуск Apple

История 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 млн
Слайд 5

История Apple 1997 – Jobs возвращается 1998 – первый iMac 2000

История 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)
Слайд 6

Mac OS 1 (1984)

Mac OS 1 (1984)

Слайд 7

Mac OS 6 (1988)

Mac OS 6 (1988)

Слайд 8

Mac OS 7 (1991)

Mac OS 7 (1991)

Слайд 9

Mac OS 7.5 (1994)

Mac OS 7.5 (1994)

Слайд 10

Mac OS 8.5 (1998)

Mac OS 8.5 (1998)

Слайд 11

Mac OS 9 (1999)

Mac OS 9 (1999)

Слайд 12

Mac OS 10 (2001)

Mac OS 10 (2001)

Слайд 13

Mac OS 10.6 (2009)

Mac OS 10.6 (2009)

Слайд 14

Hackintosh (2006) Mac OS 10.4.4 и старше Патчи к XNU

Hackintosh (2006)

Mac OS 10.4.4 и старше
Патчи к XNU

Слайд 15

MessagePad

MessagePad

Слайд 16

MessagePad & iPhone

MessagePad & iPhone

Слайд 17

Особенности Mac OS X Darwin: XNU + набор драйверов и утилит

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

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

Mach + BSD API
Фреймворки Cocoa, Carbon и Java
Технологии QuickTime, Quartz и OpenGL
Тема Aqua
Слайд 18

Архитектурная модель Aqua Darwin Quartz OpenGL QuickTime Carbon Cocoa Java GUI Фреймворки Технологии Ядро

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

Aqua

Darwin

Quartz

OpenGL

QuickTime

Carbon

Cocoa

Java

GUI
Фреймворки
Технологии
Ядро

Слайд 19

XNU = Mach + BSD Mach: - виртуальная память - RPC

XNU = Mach + BSD

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

SMP
- защита памяти
- IPC
BSD:
- POSIX интерфейс
- сигналы
- стек TCP\IP
- VFS
Слайд 20

И еще раз…

И еще раз…

Слайд 21

Toolkit GCC GDB Make Libtool Otool

Toolkit

GCC
GDB
Make
Libtool
Otool

Слайд 22

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

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

Слайд 23

Bundle

Bundle

Слайд 24

XCode

XCode

Слайд 25

Interface Builder

Interface Builder

Слайд 26

developer.apple.com

developer.apple.com

Слайд 27

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

Objective-C

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

понятие интерфейса (абстрактный класс)
Методы бывают либо виртуальные либо статические
Слабо типизирован
Слайд 28

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

Objective-C

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

определения класса
Синтаксис вызова метода
Слайд 29

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

Objective-C

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

интроспекция
Слайд 30

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

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

Слайд 31

Objective-C Классы определяют состояние и поведение Состояние определяется инвариантами Поведение –

Objective-C

Классы определяют состояние и поведение
Состояние определяется инвариантами
Поведение – методами
Менять состояние можно

методами доступа (accessors)
Слайд 32

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

Objective-C

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

классов:
+ (id)alloc;
+ (id)person;
+ (Person *)sharedPerson;
Слайд 33

Objective-C Синтаксис вызова метода (посылки сообщения): [receiver message] [receiver message: argument] [receiver message: arg1 andArg: arg2]

Objective-C

Синтаксис вызова метода (посылки сообщения):
[receiver message]
[receiver message: argument]
[receiver message: arg1 andArg:

arg2]
Слайд 34

Objective-C Пример: Person *voter = [[Person alloc] init]; int age =

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];
Слайд 35

Objective-C Точечный синтаксис (ObjC 2.0): float height = [person height]; float

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;
Слайд 36

Objective-C Нулевой указатель: if (nil == person) return; if (!person) return;

Objective-C

Нулевой указатель:
if (nil == person) return;
if (!person) return;
person = nil;
[button

setTarget: nil];
person = nil;
[person die];
Слайд 37

Objective-C Макросы для типа BOOL: BOOL flag = NO; if (flag)

Objective-C

Макросы для типа BOOL:
BOOL flag = NO;
if (flag) return;
else flag =

YES
flag = 1;
if (flag) return;
else flag = 0;
Слайд 38

Objective-C Тип SEL как указатель на метод: SEL action = [button

Objective-C

Тип SEL как указатель на метод:
SEL action = [button action];
[button setAction:

@selector(start:)];
Для методов из нескольких слов:
- (void)setName: (NSString *)name age: (int)age;
SEL sel = @selector(setName:age:);
Слайд 39

Objective-C Можно определить, отвечает ли объект на некоторое сообщение: id obj;

Objective-C

Можно определить, отвечает ли объект на некоторое сообщение:
id obj;
SEL selector =

@selector(start:);
if ([obj respondsToSelector: selector])
[obj performSelector: selector withObjects: self] ;
Слайд 40

Objective-C Сравнение указателей: if (obj1 == obj2) NSLog(@”Same exact object instance”);

Objective-C

Сравнение указателей:
if (obj1 == obj2)
NSLog(@”Same exact object instance”);
Сравнение состояний:
if ([obj1 isEqual:

obj2])
NSLog(@”Logically equivalent”);
Слайд 41

Objective-C Специальный метод-описание: - (NSString *)description; Используется в форматной строке: [NSString

Objective-C

Специальный метод-описание:
- (NSString *)description;
Используется в форматной строке:
[NSString stringWithFormat: @”Object description: %@”,

myObject];
NSLog([anObject description]);
Слайд 42

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

Foundation Framework

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

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

Foundation Контейнеры NSArray - упорядоченный массив объектов NSDictionary – ключ-значение NSSet

Foundation Контейнеры

NSArray - упорядоченный массив объектов
NSDictionary – ключ-значение
NSSet – множество уникальных

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

Foundation Контейнеры Перечисление элементов контейнера: NSArray *colors = [NSArray arrayWithObjects: @”Red”,

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 style
NSLog(color);
Слайд 45

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

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

Слайд 46

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

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

Слайд 47

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

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

Слайд 48

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

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

Слайд 49

Вызов методов родителя self – аналог this super – псевдоним объекта-родителя

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

self – аналог this
super – псевдоним объекта-родителя
- (void)doSomething
{
[super doSomething];
//…
}

Слайд 50

Создание объекта + alloc – выделение памяти для объекта некоторого класса

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

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

счетчик ссылок)
- init – вызов конструктора
MyClass *object = [[MyClass alloc] init];
Слайд 51

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

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

Слайд 52

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

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

Слайд 53

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

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

Слайд 54

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

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

Слайд 55

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

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

Слайд 56

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

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