Your SlideShare is downloading. ×
0
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Кратко о Mac OS X
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Кратко о Mac OS X

765

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
765
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Программирование Mac OS
  • 2. План <ul><li>История возникновения </li></ul><ul><li>Архитектура </li></ul><ul><li>Инструменты разработки </li></ul><ul><li>Язык </li></ul><ul><li>Библиотеки </li></ul>
  • 3. Steven Jobs &amp; Stephen Wozniak
  • 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. История 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. Mac OS 1 (1984)
  • 7. Mac OS 6 (1988)
  • 8. Mac OS 7 (1991)
  • 9. Mac OS 7.5 (1994)
  • 10. Mac OS 8.5 (1998)
  • 11. Mac OS 9 (1999)
  • 12. Mac OS 10 (2001)
  • 13. Mac OS 10.6 (2009)
  • 14. Hackintosh (2006) <ul><li>Mac OS 10.4.4 и старше </li></ul><ul><li>Патчи к XNU </li></ul>
  • 15. MessagePad
  • 16. MessagePad &amp; iPhone
  • 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. Архитектурная модель 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. 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. И еще раз…
  • 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. Компиляция из командной строки
  • 23. Bundle
  • 24. XCode
  • 25. Interface Builder
  • 26. developer.apple.com
  • 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. 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. Objective-C <ul><li>Все динамично: </li></ul><ul><li>- объекты создаются в куче </li></ul><ul><li>- нет стековых объектов </li></ul><ul><li>Методы связываются динамически </li></ul><ul><li>Присутствует интроспекция </li></ul>
  • 30. Создание объекта из класса
  • 31. Objective-C <ul><li>Классы определяют состояние и поведение </li></ul><ul><li>Состояние определяется инвариантами </li></ul><ul><li>Поведение – методами </li></ul><ul><li>Менять состояние можно методами доступа ( accessors ) </li></ul>
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 &lt; 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. Файлы описания классов
  • 46. Объявление класса
  • 47. Определение методов доступа
  • 48. Вызов собственных методов
  • 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. Создание объекта <ul><li>+ alloc – выделение памяти для объекта некоторого класса (увеличивается счетчик ссылок) </li></ul><ul><li>- init – вызов конструктора </li></ul><ul><li>MyClass *object = [[MyClass alloc] init]; </li></ul>
  • 51. Реализация конструктора
  • 52. Сбалансированные вызовы
  • 53. Управление памятью
  • 54. Управление памятью
  • 55. Управление памятью
  • 56. Реализация деструктора
  • 57. Вопросы?

×