Upload
anatoliy-okhotnikov
View
652
Download
0
Tags:
Embed Size (px)
DESCRIPTION
An old presentation(2009), historical interest :) Apple iPhone Мова Objective-C Розробка для iPhone
Citation preview
Розробка наObjective-Cдля iPhone
Анатолій Охотніков
Softjourn, Inc.
План
Apple iPhoneМова Objective-CРозробка для iPhoneПитання
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)
iPhone
Телефон для здійснення дзвінків та повідомлень набираючи ім'я та текст за допомогою інтелектуальної клавіатури iPod насолоджуйтесь музикою та відео на широкоформатному екрані та купуйте музику одним дотиком Internet перегляд веб сторінок, HTML пошти, використання GPS мап Високі технології 3G, Multi-Touch, GPS, акселерометр, сенсори, камера
Популярність iPhone
Company
3Q09 Sales
3Q09 Market Share
(%)
3Q08 Sales
3Q08 Market Share
(%)
Nokia 16,156.4 39.3 15,472.3 42.3
Research in Motion
8,522.7 20.8 5,800.4 15.9
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
Others 5,368.0 13.1 7,793.3 21.3
Total 41,067.6 100.0 36,557.4 100.0
Q3'09 iPhone займає 17.1% світового ринку смартфонів згідно зі звітом аналітичної фірми Gartner від 41 млн. в загальномуQ3'08 – 12.9%Q3'07 – 3.4%
Objective-C
Що таке Objective-C? Синтаксис Механізм повідомлень Виключення (Exceptions) Створення та знищення
об'єктів
Історія Створення нових
класів Протоколи Синхронізація Категорії Управління
пам'яттю
Що таке Objective-C
Об'єктно-оріентована мова програмування Компілюється в машинний код Побудована на основі мови С (повністю
сумісна) Парадигми SmallTalk (механізм повідмень) Входить до набору GCC Mac OS X (Cocoa), iPhone OS (CocoaTouch),
GNUstep – сім'я NeXTSTEP
Історія: SmallTalk
Розпочато роботу в 1969 Основні ідеї
– Все об'єкти– Все доступно для змін– Динамічна типізація– MVC шаблон для UI– Динамічна трансляція
Великий вплив на– Objective-C, Actor, Java,
Groovy та Ruby
Недолік – ВМ (гальмує)
Історія: Objective-C
Створено Бредом Коксом на початку 1980х Концепція IC Software
– Збирати програми з готових компонент
Проста та базується на С Класи – повноцінні об'єкти Динамізм на етапі виконання Метаінформація, протоколи,
наслідування Багато функціоналу в runtime Підтримується та розвивається Apple
Синтаксис
����������� ��� 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];
Створення нових класів
Опис класу міститься у файлі .h@interface ClassName : SuperClass { instance variable declarations} method declarations@end
Реалізація класу міститься у файлі .m#import "ClassName.h"@implementation ClassNamemethod implementations@end
У методах доступні усі instance-змінні, для управління доступом до змінних (не для методів):
– @private, @protected, @public
Механізм повідомлень
Компілятор перетворює повідомлення [object msg] у виклик функції objc_msgSend(object,SEL,...)
Кожен об'єкт містит isa – посилання на class object Компілятор створює єдиний class object class object містить посилання на superklass та
dispatch table– Пошук реалізації методу здійснються по селектору у
dispatch table
SEL (32-bit значення), кеш для прискорення NSInvocation для не знайдених методів перед
виключенням
Виключення (Exceptions)
Використовуються директиви– @try, @catch, @finally та @throw
Cup * cup = [[Cup alloc] init];@try { [cup fill];} @catch ( NSException * exc ) { NSLog ( @"Exception caught: %@", exc );}@catch ( id exc ) { NSLog ( @"Unknown exception caught" );} @finally { [cup release];}
NSException * exc = [NSException exceptionWithName: @"my-exception" reason: @"unknown-error" userInfo: nil];@throw exc;
Протоколи
Мова Objective-C містить повноцінну підтримку протоколів. Найпростіший опис протокола:
@protocol ProtocolNamemethod declarations@end
@protocol Serializable- (id) initWithCoder: (NSCoder *) coder;- (void) encodeWithCoder: (NSCoder *) coder;@end
@protocol MyProto <Protocol1, Protocol2, Serializable,Drawable>
@interface MyClass : SuperClass <Protocol1, Protocol2, Serializable,Drawable>
Так протокол Serializable можна описати наступним:
Протокол може бути успадкований від довільної кількості інших протоколів:
При описі класу можна задати список протоколів:
Створення та знищення об'єктів
В самій мові Objective-C немає спеціальних команд для створення та знищення об'єктів
(подібних new і delete) Ця задача полягає на runtime-бібліотеку і
реалізується за допомогою повідомлень– Виділення пам'яті (alloc з базового NSObject)– Ініціалізація об'єкта (init та інші що починаються з init)
id anObject = [[Rectangle alloc] init];
При створнні нового класа звичайно не виникає потреби перевизначати alloc, а ось init досить часто
Синхронізація
Підтримує синхронізацію багатопоточних програм– За допомогою директиви @synchronized()
- (void) criticalMethod { @synchronized ( self ) { // perfrom modifications to shared objects . . . }}
@synchronized () бере на вхід вказівник на об'єкт мови Objective-C (можна використовувати для цієї мети будь-який об'єкт, в тому числі і self), який грає роль м'ютекса(mutex). М'ютекс перевіряється при спробі виконання коду, який вже виконується іншим потоком і при співпадінні новий потік призупиняється(suspended).
Категорії
Можливість додавати методи до вже існуючих класів– Аналогічні можливості у Ruby, C#, JavaScript та деякі інших
Не вимагається наявність вихідних кодів класу Опис категорії:
Реалізація категорії:
#import "ClassName.h"@interface ClassName ( CategoryName )methods declarations@end
#import "CategoryName.h"@implementation ClassName ( CategoryName )methods bodies@end
Управління пам'яттю
// string1 буде видалено прибиральником сміття в автоматичному режиміNSString* string1 = [NSString string];// для string2 ви повинні будете вручну викликати release методNSString* string2 = [[NSString alloc] init];[string2 release];
У процесі створення програми для Mac OS у вас є можливість включити систему прибирання сміття (garbage collector).
В загальному, це означає, що вам не треба думати про управління пам'яттю, доки ви не дійдете до більш складних випадків.
Якщо ви створюєте об'єкт, через виклик alloc, вам необхідно буде знищити його і звільнити пам'ять при виході з програми або у кінці ділянки коду, що використовує цей об'єкт, через виклик функції release. Ви не повинні вручну знищувати autoreleased об'єкти.
Ще про управління пам'яттю
Система управління пам'яттю рахує посилання– Якщо викликаєте alloc або retain певну кількість разів– Таку саму кількість разів викликайте release
При використанні об'єкта як змінної екземпляра– autorelease для старого, та retain для нового у set-методі– Переконайеся що викликали release в методі dealloc
При одноразовому використанні об'єкта у функції – Якщо створили за допомогою alloc або copy, не забудьте
відправити йому release або autorelease повідомлення– Якщо створили іншим чином, то не робіть нічого
Розробка для iPhone
Архітектура iPhone / Сервіси iPhone OS Інструметарій розробника iPhone SDK / обмеження Cocoa Touch / інтерфейс Hello World! Збереження даних Інструменти Тестування / Розповсюдження 7 характеристик вдалої програми
Архітектура 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
Архітектура iPhone
Сервіси iPhone OS
Ядро OS– OS X Kernel, XNU Mach 3.0, BSD, Sockets, Security, Power
management, KeyChain, Certificates, File System, Bonjour
Сервіси ядра (написані на С)– Collections, Address Book, Networking, File Access, SQLite, Core
Location, Net Services, Threading, Preferences, URL Utilities
Мультимедіа– Core Audio, Open AL, Audio Mixing, Audio Recording, Video Playback,
JPG, PNG, TIFF, PDF, Quartz(2D), Core Animation, OpenGL ES
Cocoa Touch – Multi touch events, Multi touch controls, Accelerometer, View Hierarchy,
Localization, Alerts, Web views, People picker, Image picker, Controllers
Архітектура iPhone OS
Інструментарій розробника
Компьютер з Mac OS X Leopard (10.5.7 для SDK 3.1.2)
iPhone SDK (реєстрація developer.apple.com) XCode IDE (включено в SDK) Симулятор iPhone (включено в SDK) Internet (для завантаження документації)
iPhone SDK
Середовище XCode Симулятор iPhone Інструменти (Instruments) Interface Builder Ресурси для
розробників
Обмеження
Тільки API високого рівня – немає доступу до функцій дзвінка/sms, обмежений доступ до відкритих частин
Система закрита, немає відкритого / легального низькорівневого API: якщо ви ним користуєтесь – злочинець
Тільки один доданок на передньому плані, жорсткі політики для розробників (погодження з AppStore, платний сертифікат)
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
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
Ще про Cocoa Touch
Середовище розробки XCode
Побудова інтерфейсу
Interface Builder "розетки" IBOutlet'и Dependency Injection
Hello World!
@interface testViewController : UIViewController {
IBOutlet UITextField *text1; IBOutlet UITextField *text2;}
- (IBAction)copy:(id)sender;
@end
@implementation testViewController
- (IBAction)copy:(id)sender { [text2 setText:[text1 text]];}
File -> New Project -> View Based Application
Збереження даних
Всі дані зберігаються у 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
Інструменти (Instruments)
Аналіз та візуалізація швидкодії програм Оснований на DTrace від Sun Microsystems Інструменти можуть відслідковувати
– Події користувача, такі як натискування кнопок клавіатури, рухи мишкою та кліки з визначеним часом
– Активність CPU процесів та потоків.– Виділення та вивільнення пам'яті, прибирання сміття та витіки
пам'яті– Файлові читання, записи, блокування– Активність мережі та трафік– Графіку та внутрішню роботу OpenGL
Тестування
За допомогою симулятора з SDK
Приєднавши iPhone Вбудуваний debugger
або оптимізатор 2 інцеденти технічної
підтримки
Розповсюдження
Standard Developer Program (розповсюдження через App Store)
Enterprise Developer Program (розповсюдження через Intranet компанії)
Ad Hoc – обмін (розповсюдження через Email/Web сайт не більше 100 користувачам)
App Store доступний через Wi-Fi та стільникові мережі
Автоматичне повідомлення про оновлення
7 характеристик вдалої програми
Причаровуючі (дизайн, кольори, звуки, робота)
Новаторскі (нові або незвично подані концепти)
Добре опрацьовані (якісні, детальні, прості) Інтегровані (використовувати можливості)
Оптимізовані (потенціал OS, взаємодія)
Підключені (інші програми та сервіси)
Локалізовані (iPhone доступний у >80 країн)
Посилання
http://developer.apple.com/ http://ru.wikipedia.org/wiki/IPhone http://ru.wikipedia.org/wiki/Objective-C http://pyobjc.ru/2008/07/19/vvedenie-v-objective-c/ http://www.gartner.com/it/page.jsp?id=1224645 http://habrahabr.ru/blogs/macosxdev/ http://iphoneappledev.blogspot.com/ http://www.cocoalab.com/?q=becomeanxcoder