43
Розробка на Objective-C для iPhone Анатолій Охотніков Softjourn, Inc.

iPhone Objective-C Development (ukr) (2009)

Embed Size (px)

DESCRIPTION

An old presentation(2009), historical interest :) Apple iPhone Мова Objective-C Розробка для iPhone

Citation preview

Page 1: iPhone Objective-C Development (ukr) (2009)

Розробка наObjective-Cдля iPhone

Анатолій Охотніков

Softjourn, Inc.

Page 2: iPhone Objective-C Development (ukr) (2009)

План

Apple iPhoneМова Objective-CРозробка для iPhoneПитання

Page 3: iPhone Objective-C Development (ukr) (2009)

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)

Page 4: iPhone Objective-C Development (ukr) (2009)

iPhone

Телефон для здійснення дзвінків та повідомлень набираючи ім'я та текст за допомогою інтелектуальної клавіатури iPod насолоджуйтесь музикою та відео на широкоформатному екрані та купуйте музику одним дотиком Internet перегляд веб сторінок, HTML пошти, використання GPS мап Високі технології 3G, Multi-Touch, GPS, акселерометр, сенсори, камера

Page 5: iPhone Objective-C Development (ukr) (2009)

Популярність 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%

Page 6: iPhone Objective-C Development (ukr) (2009)

Objective-C

Що таке Objective-C? Синтаксис Механізм повідомлень Виключення (Exceptions) Створення та знищення

об'єктів

Історія Створення нових

класів Протоколи Синхронізація Категорії Управління

пам'яттю

Page 7: iPhone Objective-C Development (ukr) (2009)

Що таке Objective-C

Об'єктно-оріентована мова програмування Компілюється в машинний код Побудована на основі мови С (повністю

сумісна) Парадигми SmallTalk (механізм повідмень) Входить до набору GCC Mac OS X (Cocoa), iPhone OS (CocoaTouch),

GNUstep – сім'я NeXTSTEP

Page 8: iPhone Objective-C Development (ukr) (2009)

Історія: SmallTalk

Розпочато роботу в 1969 Основні ідеї

– Все об'єкти– Все доступно для змін– Динамічна типізація– MVC шаблон для UI– Динамічна трансляція

Великий вплив на– Objective-C, Actor, Java,

Groovy та Ruby

Недолік – ВМ (гальмує)

Page 9: iPhone Objective-C Development (ukr) (2009)

Історія: Objective-C

Створено Бредом Коксом на початку 1980х Концепція IC Software

– Збирати програми з готових компонент

Проста та базується на С Класи – повноцінні об'єкти Динамізм на етапі виконання Метаінформація, протоколи,

наслідування Багато функціоналу в runtime Підтримується та розвивається Apple

Page 10: iPhone Objective-C Development (ukr) (2009)

Синтаксис

����������� ��� 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];

Page 11: iPhone Objective-C Development (ukr) (2009)

Створення нових класів

Опис класу міститься у файлі .h@interface ClassName : SuperClass { instance variable declarations} method declarations@end

Реалізація класу міститься у файлі .m#import "ClassName.h"@implementation ClassNamemethod implementations@end

У методах доступні усі instance-змінні, для управління доступом до змінних (не для методів):

– @private, @protected, @public

Page 12: iPhone Objective-C Development (ukr) (2009)

Механізм повідомлень

Компілятор перетворює повідомлення [object msg] у виклик функції objc_msgSend(object,SEL,...)

Кожен об'єкт містит isa – посилання на class object Компілятор створює єдиний class object class object містить посилання на superklass та

dispatch table– Пошук реалізації методу здійснються по селектору у

dispatch table

SEL (32-bit значення), кеш для прискорення NSInvocation для не знайдених методів перед

виключенням

Page 13: iPhone Objective-C Development (ukr) (2009)

Виключення (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;

Page 14: iPhone Objective-C Development (ukr) (2009)

Протоколи

Мова 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 можна описати наступним:

Протокол може бути успадкований від довільної кількості інших протоколів:

При описі класу можна задати список протоколів:

Page 15: iPhone Objective-C Development (ukr) (2009)

Створення та знищення об'єктів

В самій мові Objective-C немає спеціальних команд для створення та знищення об'єктів

(подібних new і delete) Ця задача полягає на runtime-бібліотеку і

реалізується за допомогою повідомлень– Виділення пам'яті (alloc з базового NSObject)– Ініціалізація об'єкта (init та інші що починаються з init)

id anObject = [[Rectangle alloc] init];

При створнні нового класа звичайно не виникає потреби перевизначати alloc, а ось init досить часто

Page 16: iPhone Objective-C Development (ukr) (2009)

Синхронізація

Підтримує синхронізацію багатопоточних програм– За допомогою директиви @synchronized()

- (void) criticalMethod { @synchronized ( self ) { // perfrom modifications to shared objects . . . }}

@synchronized () бере на вхід вказівник на об'єкт мови Objective-C (можна використовувати для цієї мети будь-який об'єкт, в тому числі і self), який грає роль м'ютекса(mutex). М'ютекс перевіряється при спробі виконання коду, який вже виконується іншим потоком і при співпадінні новий потік призупиняється(suspended).

Page 17: iPhone Objective-C Development (ukr) (2009)

Категорії

Можливість додавати методи до вже існуючих класів– Аналогічні можливості у Ruby, C#, JavaScript та деякі інших

Не вимагається наявність вихідних кодів класу Опис категорії:

Реалізація категорії:

#import "ClassName.h"@interface ClassName ( CategoryName )methods declarations@end

#import "CategoryName.h"@implementation ClassName ( CategoryName )methods bodies@end

Page 18: iPhone Objective-C Development (ukr) (2009)

Управління пам'яттю

// string1 буде видалено прибиральником сміття в автоматичному режиміNSString* string1 = [NSString string];// для string2 ви повинні будете вручну викликати release методNSString* string2 = [[NSString alloc] init];[string2 release];

У процесі створення програми для Mac OS у вас є можливість включити систему прибирання сміття (garbage collector).

В загальному, це означає, що вам не треба думати про управління пам'яттю, доки ви не дійдете до більш складних випадків.

Якщо ви створюєте об'єкт, через виклик alloc, вам необхідно буде знищити його і звільнити пам'ять при виході з програми або у кінці ділянки коду, що використовує цей об'єкт, через виклик функції release. Ви не повинні вручну знищувати autoreleased об'єкти.

Page 19: iPhone Objective-C Development (ukr) (2009)

Ще про управління пам'яттю

Система управління пам'яттю рахує посилання– Якщо викликаєте alloc або retain певну кількість разів– Таку саму кількість разів викликайте release

При використанні об'єкта як змінної екземпляра– autorelease для старого, та retain для нового у set-методі– Переконайеся що викликали release в методі dealloc

При одноразовому використанні об'єкта у функції – Якщо створили за допомогою alloc або copy, не забудьте

відправити йому release або autorelease повідомлення– Якщо створили іншим чином, то не робіть нічого

Page 20: iPhone Objective-C Development (ukr) (2009)
Page 21: iPhone Objective-C Development (ukr) (2009)

Розробка для iPhone

Архітектура iPhone / Сервіси iPhone OS Інструметарій розробника iPhone SDK / обмеження Cocoa Touch / інтерфейс Hello World! Збереження даних Інструменти Тестування / Розповсюдження 7 характеристик вдалої програми

Page 22: iPhone Objective-C Development (ukr) (2009)

Архітектура 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

Page 23: iPhone Objective-C Development (ukr) (2009)

Архітектура iPhone

Page 24: iPhone Objective-C Development (ukr) (2009)
Page 25: iPhone Objective-C Development (ukr) (2009)

Сервіси 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

Page 26: iPhone Objective-C Development (ukr) (2009)

Архітектура iPhone OS

Page 27: iPhone Objective-C Development (ukr) (2009)

Інструментарій розробника

Компьютер з Mac OS X Leopard (10.5.7 для SDK 3.1.2)

iPhone SDK (реєстрація developer.apple.com) XCode IDE (включено в SDK) Симулятор iPhone (включено в SDK) Internet (для завантаження документації)

Page 28: iPhone Objective-C Development (ukr) (2009)

iPhone SDK

Середовище XCode Симулятор iPhone Інструменти (Instruments) Interface Builder Ресурси для

розробників

Page 29: iPhone Objective-C Development (ukr) (2009)

Обмеження

Тільки API високого рівня – немає доступу до функцій дзвінка/sms, обмежений доступ до відкритих частин

Система закрита, немає відкритого / легального низькорівневого API: якщо ви ним користуєтесь – злочинець

Тільки один доданок на передньому плані, жорсткі політики для розробників (погодження з AppStore, платний сертифікат)

Page 30: iPhone Objective-C Development (ukr) (2009)

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

Page 31: iPhone Objective-C Development (ukr) (2009)

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

Page 32: iPhone Objective-C Development (ukr) (2009)

Ще про Cocoa Touch

Page 33: iPhone Objective-C Development (ukr) (2009)

Середовище розробки XCode

Page 34: iPhone Objective-C Development (ukr) (2009)

Побудова інтерфейсу

Interface Builder "розетки" IBOutlet'и Dependency Injection

Page 35: iPhone Objective-C Development (ukr) (2009)

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

Page 36: iPhone Objective-C Development (ukr) (2009)

Збереження даних

Всі дані зберігаються у 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

Page 37: iPhone Objective-C Development (ukr) (2009)

Інструменти (Instruments)

Аналіз та візуалізація швидкодії програм Оснований на DTrace від Sun Microsystems Інструменти можуть відслідковувати

– Події користувача, такі як натискування кнопок клавіатури, рухи мишкою та кліки з визначеним часом

– Активність CPU процесів та потоків.– Виділення та вивільнення пам'яті, прибирання сміття та витіки

пам'яті– Файлові читання, записи, блокування– Активність мережі та трафік– Графіку та внутрішню роботу OpenGL

Page 38: iPhone Objective-C Development (ukr) (2009)
Page 39: iPhone Objective-C Development (ukr) (2009)

Тестування

За допомогою симулятора з SDK

Приєднавши iPhone Вбудуваний debugger

або оптимізатор 2 інцеденти технічної

підтримки

Page 40: iPhone Objective-C Development (ukr) (2009)

Розповсюдження

Standard Developer Program (розповсюдження через App Store)

Enterprise Developer Program (розповсюдження через Intranet компанії)

Ad Hoc – обмін (розповсюдження через Email/Web сайт не більше 100 користувачам)

App Store доступний через Wi-Fi та стільникові мережі

Автоматичне повідомлення про оновлення

Page 41: iPhone Objective-C Development (ukr) (2009)

7 характеристик вдалої програми

Причаровуючі (дизайн, кольори, звуки, робота)

Новаторскі (нові або незвично подані концепти)

Добре опрацьовані (якісні, детальні, прості) Інтегровані (використовувати можливості)

Оптимізовані (потенціал OS, взаємодія)

Підключені (інші програми та сервіси)

Локалізовані (iPhone доступний у >80 країн)

Page 42: iPhone Objective-C Development (ukr) (2009)

Посилання

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

Page 43: iPhone Objective-C Development (ukr) (2009)

Питання?

З питаннями та по інформацію звертатись:

Анатолій Охотніков

[email protected]