Программирование  Mac OS
План <ul><li>История возникновения </li></ul><ul><li>Архитектура </li></ul><ul><li>Инструменты разработки </li></ul><ul><l...
Steven Jobs & Stephen Wozniak
История Apple <ul><li>19 76  – появился Apple  I </li></ul><ul><li>19 77  – выпуск Apple  I I </li></ul><ul><li>1979 – нач...
История Apple <ul><li>1997  –  Jobs  возвращается </li></ul><ul><li>1998 – первый  i Mac </li></ul><ul><li>200 0  –  Aqua ...
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) <ul><li>Mac OS 10.4.4 и старше </li></ul><ul><li>Патчи к XNU </li></ul>
MessagePad
MessagePad & iPhone
Особенности  Mac OS X <ul><li>Darwin: XNU + набор драйверов и утилит </li></ul><ul><li>XNU: ядро Mach + BSD API </li></ul>...
Архитектурная  модель Aqua Darwin Quartz OpenGL QuickTime Carbon Cocoa Java <ul><li>GUI </li></ul><ul><li>Фреймворки </li>...
XNU = Mach + BSD <ul><li>Mach: </li></ul><ul><li>- виртуальная память </li></ul><ul><li>- RPC </li></ul><ul><li>- вытесняю...
И еще раз…
Toolkit <ul><li>GCC </li></ul><ul><li>GDB </li></ul><ul><li>Make </li></ul><ul><li>Libtool </li></ul><ul><li>Otool </li></ul>
Компиляция из командной строки
Bundle
XCode
Interface Builder
developer.apple.com
Objective-C <ul><li>Надмножество С </li></ul><ul><li>Очень простой язык, но новый синтаксис </li></ul><ul><li>Одиночное на...
Objective-C <ul><li>Новые типы: </li></ul><ul><li>- анонимный объект ( id ) </li></ul><ul><li>- класс  (Class) </li></ul><...
Objective-C <ul><li>Все динамично: </li></ul><ul><li>- объекты создаются в куче </li></ul><ul><li>- нет стековых объектов ...
Создание объекта из класса
Objective-C <ul><li>Классы определяют состояние и поведение </li></ul><ul><li>Состояние определяется инвариантами </li></u...
Objective-C <ul><li>Объекты   отвечают на методы объекта: </li></ul><ul><li>- ( id ) init; </li></ul><ul><li>- (float)heig...
Objective-C <ul><li>Синтаксис вызова метода (посылки сообщения): </li></ul><ul><li>[receiver  message ] </li></ul><ul><li>...
Objective-C <ul><li>Пример: </li></ul><ul><li>Person *voter = [[Person  alloc ]  init ]; </li></ul><ul><li>int age = [vote...
Objective-C <ul><li>Точечный   синтаксис ( ObjC 2.0 ): </li></ul><ul><li>float height = [person height]; </li></ul><ul><li...
Objective-C <ul><li>Нулевой указатель: </li></ul><ul><li>if (nil == person) return; </li></ul><ul><li>if (!person) return;...
Objective-C <ul><li>Макросы для типа  BOOL : </li></ul><ul><li>BOOL flag = NO; </li></ul><ul><li>if (flag) return; </li></...
Objective-C <ul><li>Тип  SEL  как указатель на метод: </li></ul><ul><li>SEL   action = [button action]; </li></ul><ul><li>...
Objective-C <ul><li>Можно определить, отвечает ли объект на некоторое сообщение: </li></ul><ul><li>id   obj; </li></ul><ul...
Objective-C <ul><li>Сравнение   указателей: </li></ul><ul><li>if   (obj1 == obj2) </li></ul><ul><li>NSLog(@”Same exact obj...
Objective-C <ul><li>Специальный метод-описание: </li></ul><ul><li>- ( NSString * ) description; </li></ul><ul><li>Использу...
Foundation Framework <ul><li>Содержит классы для АТД </li></ul><ul><li>Задачи, таймера, нити </li></ul><ul><li>Работа с фа...
Foundation  Контейнеры <ul><li>NSArray  - упорядоченный массив объектов </li></ul><ul><li>NSDictionary  – ключ-значение </...
Foundation  Контейнеры <ul><li>Перечисление элементов контейнера: </li></ul><ul><li>NSArray *colors = [NSArray arrayWithOb...
Файлы описания классов
Объявление класса
Определение методов доступа
Вызов собственных методов
Вызов методов родителя <ul><li>self –  аналог  this </li></ul><ul><li>super –  псевдоним объекта-родителя </li></ul><ul><l...
Создание объекта <ul><li>+ alloc –  выделение памяти для объекта некоторого класса (увеличивается счетчик ссылок) </li></u...
Реализация конструктора
Сбалансированные вызовы
Управление памятью
Управление памятью
Управление памятью
Реализация деструктора
Вопросы?
Upcoming SlideShare
Loading in …5
×

Кратко о Mac OS X

1,041 views
891 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

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

No notes for slide

Кратко о Mac OS X

  1. 1. Программирование Mac OS
  2. 2. План <ul><li>История возникновения </li></ul><ul><li>Архитектура </li></ul><ul><li>Инструменты разработки </li></ul><ul><li>Язык </li></ul><ul><li>Библиотеки </li></ul>
  3. 3. Steven Jobs & Stephen Wozniak
  4. 4. История Apple <ul><li>19 76 – появился Apple I </li></ul><ul><li>19 77 – выпуск Apple I I </li></ul><ul><li>1979 – начинается работа над Macintosh </li></ul><ul><li>1982 – годовой доход превышает $1 млрд </li></ul><ul><li>1984 – в продажу выходит Macintosh </li></ul><ul><li>1985 – Jobs уходит и основывает NeXT </li></ul><ul><li>1991 – первый ноутбук ( PowerBook ) </li></ul><ul><li>1992 – IBM и Apple создают PowerPC </li></ul><ul><li>1995 – годовой доход превышает $11 млрд </li></ul><ul><li>1996 – Apple покупает NeXT за $430 млн </li></ul>
  5. 5. История Apple <ul><li>1997 – Jobs возвращается </li></ul><ul><li>1998 – первый i Mac </li></ul><ul><li>200 0 – Aqua интерфейс </li></ul><ul><li>Март 2001 – Apple выпускает Mac OS X (Cheetah) и первый iPod </li></ul><ul><li>Сентябрь 2001 – Mac OS 10.1 (Puma) </li></ul><ul><li>Август 2002 – Mac OS 10.2 (Jaguar) </li></ul><ul><li>Октябрь 2003 – Mac OS 10.3 (Panther) </li></ul><ul><li>Апрель 2005 – Mac OS 10.4 (Tiger) </li></ul><ul><li>Октябрь 2007 – Mac OS 10.5 (Leopard) </li></ul><ul><li>Август 2009 – Mac OS 10.6 (Snow Leopard) </li></ul>
  6. 6. Mac OS 1 (1984)
  7. 7. Mac OS 6 (1988)
  8. 8. Mac OS 7 (1991)
  9. 9. Mac OS 7.5 (1994)
  10. 10. Mac OS 8.5 (1998)
  11. 11. Mac OS 9 (1999)
  12. 12. Mac OS 10 (2001)
  13. 13. Mac OS 10.6 (2009)
  14. 14. Hackintosh (2006) <ul><li>Mac OS 10.4.4 и старше </li></ul><ul><li>Патчи к XNU </li></ul>
  15. 15. MessagePad
  16. 16. MessagePad & iPhone
  17. 17. Особенности Mac OS X <ul><li>Darwin: XNU + набор драйверов и утилит </li></ul><ul><li>XNU: ядро Mach + BSD API </li></ul><ul><li>Фреймворки Cocoa, Carbon и Java </li></ul><ul><li>Технологии QuickTime, Quartz и OpenGL </li></ul><ul><li>Тема Aqua </li></ul>
  18. 18. Архитектурная модель Aqua Darwin Quartz OpenGL QuickTime Carbon Cocoa Java <ul><li>GUI </li></ul><ul><li>Фреймворки </li></ul><ul><li>Технологии </li></ul><ul><li>Ядро </li></ul>
  19. 19. XNU = Mach + BSD <ul><li>Mach: </li></ul><ul><li>- виртуальная память </li></ul><ul><li>- RPC </li></ul><ul><li>- вытесняющее планирование и SMP </li></ul><ul><li>- защита памяти </li></ul><ul><li>- IPC </li></ul><ul><li>BSD: </li></ul><ul><li>- POSIX интерфейс </li></ul><ul><li>- сигналы </li></ul><ul><li>- стек TCPIP </li></ul><ul><li>- VFS </li></ul>
  20. 20. И еще раз…
  21. 21. Toolkit <ul><li>GCC </li></ul><ul><li>GDB </li></ul><ul><li>Make </li></ul><ul><li>Libtool </li></ul><ul><li>Otool </li></ul>
  22. 22. Компиляция из командной строки
  23. 23. Bundle
  24. 24. XCode
  25. 25. Interface Builder
  26. 26. developer.apple.com
  27. 27. Objective-C <ul><li>Надмножество С </li></ul><ul><li>Очень простой язык, но новый синтаксис </li></ul><ul><li>Одиночное наследование, единый базовый класс </li></ul><ul><li>Есть понятие интерфейса (абстрактный класс) </li></ul><ul><li>Методы бывают либо виртуальные либо статические </li></ul><ul><li>Слабо типизирован </li></ul>
  28. 28. Objective-C <ul><li>Новые типы: </li></ul><ul><li>- анонимный объект ( id ) </li></ul><ul><li>- класс (Class) </li></ul><ul><li>- селектор (SEL) </li></ul><ul><li>Синтаксис объявления и определения класса </li></ul><ul><li>Синтаксис вызова метода </li></ul>
  29. 29. Objective-C <ul><li>Все динамично: </li></ul><ul><li>- объекты создаются в куче </li></ul><ul><li>- нет стековых объектов </li></ul><ul><li>Методы связываются динамически </li></ul><ul><li>Присутствует интроспекция </li></ul>
  30. 30. Создание объекта из класса
  31. 31. Objective-C <ul><li>Классы определяют состояние и поведение </li></ul><ul><li>Состояние определяется инвариантами </li></ul><ul><li>Поведение – методами </li></ul><ul><li>Менять состояние можно методами доступа ( accessors ) </li></ul>
  32. 32. Objective-C <ul><li>Объекты отвечают на методы объекта: </li></ul><ul><li>- ( id ) init; </li></ul><ul><li>- (float)height; </li></ul><ul><li>- (void)walk; </li></ul><ul><li>Классы отвечают на методы классов: </li></ul><ul><li>+ ( id ) alloc; </li></ul><ul><li>+ (id)person; </li></ul><ul><li>+ (Person *)sharedPerson; </li></ul>
  33. 33. Objective-C <ul><li>Синтаксис вызова метода (посылки сообщения): </li></ul><ul><li>[receiver message ] </li></ul><ul><li>[receiver message: argument] </li></ul><ul><li>[receiver message: arg1 andArg: arg2] </li></ul>
  34. 34. Objective-C <ul><li>Пример: </li></ul><ul><li>Person *voter = [[Person alloc ] init ]; </li></ul><ul><li>int age = [voter age ]; </li></ul><ul><li>[voter setAge: 21] </li></ul><ul><li>if ([voter canLegallyVote ]) </li></ul><ul><li>{/*do smth*/} </li></ul><ul><li>[voter registerForState: @”CA” party: @”Independant”]; </li></ul><ul><li>NSString *name = [[voter spouse ] name ]; </li></ul>
  35. 35. Objective-C <ul><li>Точечный синтаксис ( ObjC 2.0 ): </li></ul><ul><li>float height = [person height]; </li></ul><ul><li>float height = person.height; </li></ul><ul><li>[person setHeight: newHeight]; </li></ul><ul><li>person.height = newHeight; </li></ul><ul><li>[[person child] setHeight: newHeight]; </li></ul><ul><li>person.child.height = newHeight; </li></ul>
  36. 36. Objective-C <ul><li>Нулевой указатель: </li></ul><ul><li>if (nil == person) return; </li></ul><ul><li>if (!person) return; </li></ul><ul><li>person = nil; </li></ul><ul><li>[button setTarget: nil]; </li></ul><ul><li>person = nil; </li></ul><ul><li>[person die]; </li></ul>
  37. 37. Objective-C <ul><li>Макросы для типа BOOL : </li></ul><ul><li>BOOL flag = NO; </li></ul><ul><li>if (flag) return; </li></ul><ul><li>else flag = YES </li></ul><ul><li>flag = 1; </li></ul><ul><li>if (flag) return; </li></ul><ul><li>else flag = 0; </li></ul>
  38. 38. Objective-C <ul><li>Тип SEL как указатель на метод: </li></ul><ul><li>SEL action = [button action]; </li></ul><ul><li>[button setAction: @selector(start:)]; </li></ul><ul><li>Для методов из нескольких слов: </li></ul><ul><li>- ( void ) setName: (NSString *)name age: (int)age; </li></ul><ul><li>SEL sel = @selector(setName:age:); </li></ul>
  39. 39. Objective-C <ul><li>Можно определить, отвечает ли объект на некоторое сообщение: </li></ul><ul><li>id obj; </li></ul><ul><li>SEL selector = @selector(start:); </li></ul><ul><li>if ([obj respondsToSelector: selector]) </li></ul><ul><li>[obj performSelector: selector withObjects: self] ; </li></ul>
  40. 40. Objective-C <ul><li>Сравнение указателей: </li></ul><ul><li>if (obj1 == obj2) </li></ul><ul><li>NSLog(@”Same exact object instance”); </li></ul><ul><li>Сравнение состояний: </li></ul><ul><li>if ([obj1 isEqual: obj2]) </li></ul><ul><li>NSLog(@”Logically equivalent”); </li></ul>
  41. 41. Objective-C <ul><li>Специальный метод-описание: </li></ul><ul><li>- ( NSString * ) description; </li></ul><ul><li>Используется в форматной строке: </li></ul><ul><li>[NSString stringWithFormat: @”Object description: %@”, myObject]; </li></ul><ul><li>NSLog([anObject description]); </li></ul>
  42. 42. Foundation Framework <ul><li>Содержит классы для АТД </li></ul><ul><li>Задачи, таймера, нити </li></ul><ul><li>Работа с файлами, IPC, bundle </li></ul><ul><li>NSObject: </li></ul><ul><li>- всеобщий базовый класс </li></ul><ul><li>- управление памятью </li></ul><ul><li>- сравнение объектов </li></ul><ul><li>- интроспекция </li></ul>
  43. 43. Foundation Контейнеры <ul><li>NSArray - упорядоченный массив объектов </li></ul><ul><li>NSDictionary – ключ-значение </li></ul><ul><li>NSSet – множество уникальных объектов </li></ul><ul><li>Единый механизм перечисления </li></ul><ul><li>Константные и изменяемые классы </li></ul><ul><li>NSMutableArray, NSMutableDictionary, NSMutableSet </li></ul>
  44. 44. Foundation Контейнеры <ul><li>Перечисление элементов контейнера: </li></ul><ul><li>NSArray *colors = [NSArray arrayWithObjects: @”Red”, @”Blue”, @”Green”, nil]; </li></ul><ul><li>NSString *color; </li></ul><ul><li>int count = [colors count]; </li></ul><ul><li>for (i = 0; i < count; ++i ) //old style </li></ul><ul><li>{ </li></ul><ul><li>color = [array objectAtIndex: i]; </li></ul><ul><li>NSLog(color); </li></ul><ul><li>} </li></ul><ul><li>for (Color *color in colors ) //new style </li></ul><ul><li>NSLog(color); </li></ul>
  45. 45. Файлы описания классов
  46. 46. Объявление класса
  47. 47. Определение методов доступа
  48. 48. Вызов собственных методов
  49. 49. Вызов методов родителя <ul><li>self – аналог this </li></ul><ul><li>super – псевдоним объекта-родителя </li></ul><ul><li>- ( void ) doSomething </li></ul><ul><li>{ </li></ul><ul><li>[super doSomething]; </li></ul><ul><li>//… </li></ul><ul><li>} </li></ul>
  50. 50. Создание объекта <ul><li>+ alloc – выделение памяти для объекта некоторого класса (увеличивается счетчик ссылок) </li></ul><ul><li>- init – вызов конструктора </li></ul><ul><li>MyClass *object = [[MyClass alloc] init]; </li></ul>
  51. 51. Реализация конструктора
  52. 52. Сбалансированные вызовы
  53. 53. Управление памятью
  54. 54. Управление памятью
  55. 55. Управление памятью
  56. 56. Реализация деструктора
  57. 57. Вопросы?

×