3. Apple Inc.
Залізо – Mac (персональні комп'ютери та
ноутбуки), Cinema Display, AirPort, etc.
Програмне забезпечення – Mac OS X,
Mac OS X Server, QuickTime, iLife, iWork,
Logic Pro, etc.
Побутова електроніка – iPod, iPhone,
AppleTV, etc.
Співробітники – 35100 (станом на січень
2009)
4. iPhone
Телефон для здійснення дзвінків та
повідомлень набираючи ім'я та текст за
допомогою інтелектуальної клавіатури
iPod насолоджуйтесь музикою та
відео на широкоформатному екрані
та купуйте музику одним дотиком
Internet перегляд веб сторінок,
HTML пошти, використання GPS мап
Високі технології 3G, Multi-Touch,
GPS, акселерометр, сенсори, камера
5. Популярність iPhone
3Q09 3Q09 3Q08 3Q08
Company
Sales Market Sales Market Q3'09 iPhone займає
Share Share
(%) (%) 17.1% світового ринку
смартфонів згідно зі
Nokia 16,156.4 39.3 15,472.3 42.3
звітом аналітичної
Research 8,522.7 20.8 5,800.4 15.9
in Motion фірми Gartner від 41
Apple 7,040.4 17.1 4720.3 12.9
млн. в загальному
HTC 2,659.5 6.5 1,656.3 4.5
Samsung 1,320.6 3.2 1,114.8 3.0
Q3'08 – 12.9%
Others 5,368.0 13.1 7,793.3 21.3 Q3'07 – 3.4%
Total 41,067.6 100.0 36,557.4 100.0
6. Objective-C
Що таке Objective-C? Історія
Синтаксис Створення нових
Механізм повідомлень класів
Виключення (Exceptions) Протоколи
Створення та знищення Синхронізація
об'єктів Категорії
Управління
пам'яттю
7. Що таке Objective-C
Об'єктно-оріентована мова програмування
Компілюється в машинний код
Побудована на основі мови С (повністю
сумісна)
Парадигми SmallTalk (механізм повідмень)
Входить до набору GCC
Mac OS X (Cocoa), iPhone OS (CocoaTouch),
GNUstep – сім'я NeXTSTEP
8. Історія: SmallTalk
Розпочато роботу в 1969
Основні ідеї
– Все об'єкти
– Все доступно для змін
– Динамічна типізація
– MVC шаблон для UI
– Динамічна трансляція
Великий вплив на
– Objective-C, Actor, Java,
Groovy та Ruby
Недолік – ВМ (гальмує)
9. Історія: Objective-C
Створено Бредом Коксом на початку 1980х
Концепція IC Software
– Збирати програми з готових компонент
Проста та базується на С
Класи – повноцінні об'єкти
Динамізм на етапі виконання
Метаінформація, протоколи,
наслідування
Багато функціоналу в runtime
Підтримується та розвивається Apple
10. Синтаксис
id '
[receiver message];
Параметри [myRect setWidth:10.0 :20.0];
Мітки параметрів [myRect setWidth:10.0 height:20.0];
Кількість аргументів [myObject makeGroup: obj1, obj2, nil];
Поверненння значення float area = [myRect area];
Вкладені повідомення [myRect setColor:[otherRect color]];
class object для створення (на зразок Abstract Factory)
Класи як об'єкти Rect * myRect = [[Rect alloc] init];
11. Створення нових класів
Опис класу міститься у файлі .h
@interface ClassName : SuperClass {
instance variable declarations
}
method declarations
@end
Реалізація класу міститься у файлі .m
#import "ClassName.h"
@implementation ClassName
method implementations
@end
У методах доступні усі instance-змінні, для
управління доступом до змінних (не для методів):
– @private, @protected, @public
12. Механізм повідомлень
Компілятор перетворює повідомлення [object msg] у
виклик функції objc_msgSend(object,SEL,...)
Кожен об'єкт містит isa – посилання на class object
Компілятор створює єдиний class object
class object містить посилання на superklass та
dispatch table
– Пошук реалізації методу здійснються по селектору у
dispatch table
SEL (32-bit значення), кеш для прискорення
NSInvocation для не знайдених методів перед
виключенням
14. Протоколи
Мова Objective-C містить повноцінну підтримку
протоколів. Найпростіший опис протокола:
@protocol ProtocolName
method declarations
@end
Так протокол Serializable можна описати наступним:
@protocol Serializable
- (id) initWithCoder: (NSCoder *) coder;
- (void) encodeWithCoder: (NSCoder *) coder;
@end
Протокол може бути успадкований від довільної
кількості інших протоколів:
@protocol MyProto <Protocol1, Protocol2, Serializable,Drawable>
При описі класу можна задати список протоколів:
@interface MyClass : SuperClass <Protocol1, Protocol2, Serializable,Drawable>
15. Створення та знищення об'єктів
В самій мові Objective-C немає спеціальних команд
для створення та знищення об'єктів
(подібних new і delete)
Ця задача полягає на runtime-бібліотеку і
реалізується за допомогою повідомлень
– Виділення пам'яті (alloc з базового NSObject)
– Ініціалізація об'єкта (init та інші що починаються з init)
id anObject = [[Rectangle alloc] init];
При створнні нового класа звичайно не виникає
потреби перевизначати alloc, а ось init досить часто
16. Синхронізація
Підтримує синхронізацію багатопоточних програм
– За допомогою директиви @synchronized()
- (void) criticalMethod {
@synchronized ( self ) {
// perfrom modifications to shared objects
. . .
}
}
@synchronized () бере на вхід вказівник на об'єкт мови Objective-C
(можна використовувати для цієї мети будь-який об'єкт, в тому числі і
self), який грає роль м'ютекса(mutex). М'ютекс перевіряється при спробі
виконання коду, який вже виконується іншим потоком і при співпадінні
новий потік призупиняється(suspended).
17. Категорії
Можливість додавати методи до вже існуючих класів
– Аналогічні можливості у Ruby, C#, JavaScript та деякі інших
Не вимагається наявність вихідних кодів класу
Опис категорії: #import "ClassName.h"
@interface ClassName ( CategoryName )
methods declarations
@end
Реалізація категорії:
#import "CategoryName.h"
@implementation ClassName ( CategoryName )
methods bodies
@end
18. Управління пам'яттю
У процесі створення програми для Mac OS у вас є можливість
включити систему прибирання сміття (garbage collector).
В загальному, це означає, що вам не треба думати про управління
пам'яттю, доки ви не дійдете до більш складних випадків.
Якщо ви створюєте об'єкт, через виклик alloc, вам необхідно буде
знищити його і звільнити пам'ять при виході з програми або у кінці
ділянки коду, що використовує цей об'єкт, через виклик функції
release. Ви не повинні вручну знищувати autoreleased об'єкти.
// string1 буде видалено прибиральником сміття в автоматичному режимі
NSString* string1 = [NSString string];
// для string2 ви повинні будете вручну викликати release метод
NSString* string2 = [[NSString alloc] init];
[string2 release];
19. Ще про управління пам'яттю
Система управління пам'яттю рахує посилання
– Якщо викликаєте alloc або retain певну кількість разів
– Таку саму кількість разів викликайте release
При використанні об'єкта як змінної екземпляра
– autorelease для старого, та retain для нового у set-методі
– Переконайеся що викликали release в методі dealloc
При одноразовому використанні об'єкта у функції
– Якщо створили за допомогою alloc або copy, не забудьте
відправити йому release або autorelease повідомлення
– Якщо створили іншим чином, то не робіть нічого
20.
21. Розробка для iPhone
Архітектура iPhone / Сервіси iPhone OS
Інструметарій розробника
iPhone SDK / обмеження
Cocoa Touch / інтерфейс
Hello World!
Збереження даних
Інструменти
Тестування / Розповсюдження
7 характеристик вдалої програми
22. Архітектура iPhone
32-біт RISC ISA комп'ютер, з ARM11/ARM Cortex A8 процесором
412/600 Мгц виробництва Samsung Electronics, графічні ядра
PowerVR MBX-Lite/SGX, 128/256 RAM, 8/16/32 Гб флеш-пам'яті,
Wi-Fi, Bluetooth, GSM/EDGE, 3G, A-GPS
27. Інструментарій розробника
Компьютер з Mac OS X Leopard (10.5.7 для
SDK 3.1.2)
iPhone SDK (реєстрація developer.apple.com)
XCode IDE (включено в SDK)
Симулятор iPhone (включено в SDK)
Internet (для завантаження документації)
28. iPhone SDK
Середовище XCode
Симулятор iPhone
Інструменти (Instruments)
Interface Builder
Ресурси для
розробників
29. Обмеження
Тільки API високого рівня – немає доступу до
функцій дзвінка/sms, обмежений доступ до
відкритих частин
Система закрита, немає відкритого /
легального низькорівневого API: якщо ви ним
користуєтесь – злочинець
Тільки один доданок на передньому плані,
жорсткі політики для розробників
(погодження з AppStore, платний сертифікат)
30. Cocoa
Об'єкто-орієнтоване середовище
Cocoa, Carbon, Toolbox, POSIX i Java
XCode (Project Builder) i Interface Builder
Objective-C, Ruby, Python, Perl, C#, ObjB
«Користувацький інтерфейс» - Apple HIG
Основні Foundation Kit / Application Kit
MVC, late binding, KVC, KVO
31. Cocoa Touch
API що надає рівень абстракції для iPhone OS
Оснований на Cocoa API
Побудований навколо вводу дотиком
UI Kit
– User Interface Elements, Application Runtime, Event
Handling, Hardware APIs
Foundation
– Utility Classes, Collection Classes, Object Wrappers for
system services, Subset of Foundation in Cocoa
36. Збереження даних
Всі дані зберігаються у SQLite v3 базах даних
SMS /private/var/root/Library/SMS/sms.db
CallData /System/Library/Frameworks/AppSupport.framework/calldata.db
CallHistory /private/var/root/Library/CallHistory/call_history.db
KeyChain /private/var/root/Library/Keychains/keychain-2.db
Notes /private/var/root/Library/Notes/notes.db
Voicemail /private/var/root/Library/Voicemail/voicemail.db
AddressBook /private/var/root/Library/AddressBook/AddressBook.sqlitedb
AddressBook Images /private/var/root/Library/AddressBook/AddressBookImages
Maptiles /private/var/root/Library/Caches/MapTiles/MapTiles.sqlitedb
Calendar /private/var/root/Library/Calendar/Calendar.sqlitedb
37. Інструменти (Instruments)
Аналіз та візуалізація швидкодії програм
Оснований на DTrace від Sun Microsystems
Інструменти можуть відслідковувати
– Події користувача, такі як натискування кнопок клавіатури, рухи
мишкою та кліки з визначеним часом
– Активність CPU процесів та потоків.
– Виділення та вивільнення пам'яті, прибирання сміття та витіки
пам'яті
– Файлові читання, записи, блокування
– Активність мережі та трафік
– Графіку та внутрішню роботу OpenGL
38.
39. Тестування
За допомогою
симулятора з SDK
Приєднавши iPhone
Вбудуваний debugger
або оптимізатор
2 інцеденти технічної
підтримки
40. Розповсюдження
Standard Developer Program
(розповсюдження через App Store)
Enterprise Developer Program
(розповсюдження через Intranet компанії)
Ad Hoc – обмін (розповсюдження через
Email/Web сайт не більше 100 користувачам)
App Store доступний через Wi-Fi та
стільникові мережі
Автоматичне повідомлення про оновлення
41. 7 характеристик вдалої програми
Причаровуючі (дизайн, кольори, звуки, робота)
Новаторскі (нові або незвично подані концепти)
Добре опрацьовані (якісні, детальні, прості)
Інтегровані (використовувати можливості)
Оптимізовані (потенціал OS, взаємодія)
Підключені (інші програми та сервіси)
Локалізовані (iPhone доступний у >80 країн)