SlideShare a Scribd company logo
Розробка на
          Objective-C
          для iPhone




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

Softjourn, Inc.
План

 AppleiPhone
 Мова 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

               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
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 ClassName
    method 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 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>
Створення та знищення об'єктів

   В самій мові 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
Управління пам'яттю

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

// string1 буде видалено прибиральником сміття в автоматичному режимі
NSString* string1 = [NSString string];
// для string2 ви повинні будете вручну викликати release метод
NSString* string2 = [[NSString alloc] init];
[string2 release];
Ще про управління пам'яттю
   Система управління пам'яттю рахує посилання
    –   Якщо викликаєте alloc або retain певну кількість разів
    –   Таку саму кількість разів викликайте release
   При використанні об'єкта як змінної екземпляра
    –   autorelease для старого, та retain для нового у set-методі
    –   Переконайеся що викликали release в методі dealloc
   При одноразовому використанні об'єкта у функції
    –   Якщо створили за допомогою alloc або copy, не забудьте
        відправити йому release або autorelease повідомлення
    –   Якщо створили іншим чином, то не робіть нічого
iPhone Objective-C Development (ukr) (2009)
Розробка для 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 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
Архітектура 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!

   File -> New Project -> View Based Application
@interface testViewController : UIViewController {

    IBOutlet UITextField *text1;
    IBOutlet UITextField *text2;
}

- (IBAction)copy:(id)sender;

@end

@implementation testViewController

- (IBAction)copy:(id)sender {
  [text2 setText:[text1 text]];
}
Збереження даних

Всі дані зберігаються у 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
iPhone Objective-C Development (ukr) (2009)
Тестування

   За допомогою
    симулятора з 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
Питання?

З питаннями та по інформацію звертатись:
Анатолій Охотніков
aokhotnikov@softjourn.com

More Related Content

What's hot (20)

PPTX
System programing module 1. Processes
Andrii Hladkyi
 
PPTX
DAL
eleksdev
 
PPTX
System programing module 2. Threads
Andrii Hladkyi
 
PPTX
G rpc lection1_theory_bkp2
eleksdev
 
PPTX
10 asp.net
eleksdev
 
PPTX
System programing module 1
Andrii Hladkyi
 
PPTX
Web service lecture
eleksdev
 
PPTX
Net framework і c# module 5
Andrii Hladkyi
 
PPTX
NET Framework and C# Module 5. Interfaces
Andrii Hladkyi
 
PPTX
Rpc
eleksdev
 
PPTX
System programing module 2
Andrii Hladkyi
 
PPTX
07 Database Access
eleksdev
 
PPTX
Inf tema 1_urok_4_6_klas
AllaGureva
 
PPTX
System programing module 3
Andrii Hladkyi
 
PDF
Tdd, ти де?
Roman Mazur
 
PPTX
Net framework and C# module 17. Serialization
Andrii Hladkyi
 
PDF
Php unit. Y. Muzychushun
HRdepartment
 
PDF
Тестування при розробці програмного забезпечення. Unit Tests.
Elantix
 
PPTX
Windows service
eleksdev
 
System programing module 1. Processes
Andrii Hladkyi
 
System programing module 2. Threads
Andrii Hladkyi
 
G rpc lection1_theory_bkp2
eleksdev
 
10 asp.net
eleksdev
 
System programing module 1
Andrii Hladkyi
 
Web service lecture
eleksdev
 
Net framework і c# module 5
Andrii Hladkyi
 
NET Framework and C# Module 5. Interfaces
Andrii Hladkyi
 
System programing module 2
Andrii Hladkyi
 
07 Database Access
eleksdev
 
Inf tema 1_urok_4_6_klas
AllaGureva
 
System programing module 3
Andrii Hladkyi
 
Tdd, ти де?
Roman Mazur
 
Net framework and C# module 17. Serialization
Andrii Hladkyi
 
Php unit. Y. Muzychushun
HRdepartment
 
Тестування при розробці програмного забезпечення. Unit Tests.
Elantix
 
Windows service
eleksdev
 

Viewers also liked (16)

PDF
Web application security (eng)
Anatoliy Okhotnikov
 
PDF
Php unit (eng)
Anatoliy Okhotnikov
 
PDF
Php web app security (eng)
Anatoliy Okhotnikov
 
PDF
Debug (ukr)
Anatoliy Okhotnikov
 
PDF
ITIL (ukr)
Anatoliy Okhotnikov
 
PDF
Ubuntu server wireless access point (eng)
Anatoliy Okhotnikov
 
PDF
ITEvent: Continuous Integration (ukr)
Anatoliy Okhotnikov
 
PDF
Jenkins CI (ukr)
Anatoliy Okhotnikov
 
PDF
Continuous integration (eng)
Anatoliy Okhotnikov
 
PDF
ITEvent: Kanban Intro (ukr)
Anatoliy Okhotnikov
 
PDF
Db design (ukr)
Anatoliy Okhotnikov
 
PDF
Linux introduction (eng)
Anatoliy Okhotnikov
 
PDF
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Anatoliy Okhotnikov
 
PDF
Agile Feedback Loops (ukr)
Anatoliy Okhotnikov
 
PDF
Ldap introduction (eng)
Anatoliy Okhotnikov
 
PDF
Agile (IF PM Group) v2
Anatoliy Okhotnikov
 
Web application security (eng)
Anatoliy Okhotnikov
 
Php unit (eng)
Anatoliy Okhotnikov
 
Php web app security (eng)
Anatoliy Okhotnikov
 
Debug (ukr)
Anatoliy Okhotnikov
 
Ubuntu server wireless access point (eng)
Anatoliy Okhotnikov
 
ITEvent: Continuous Integration (ukr)
Anatoliy Okhotnikov
 
Jenkins CI (ukr)
Anatoliy Okhotnikov
 
Continuous integration (eng)
Anatoliy Okhotnikov
 
ITEvent: Kanban Intro (ukr)
Anatoliy Okhotnikov
 
Db design (ukr)
Anatoliy Okhotnikov
 
Linux introduction (eng)
Anatoliy Okhotnikov
 
Project Management: Burn-Down Chart / OrangeHRM Project MOD (eng)
Anatoliy Okhotnikov
 
Agile Feedback Loops (ukr)
Anatoliy Okhotnikov
 
Ldap introduction (eng)
Anatoliy Okhotnikov
 
Agile (IF PM Group) v2
Anatoliy Okhotnikov
 
Ad

Similar to iPhone Objective-C Development (ukr) (2009) (20)

PDF
Lecture 06. iOS Programming. Основи Objective-C
Maksym Davydov
 
PPT
V24 com to_net
Ringonoki
 
PPTX
ASP.Net MVC
Victor Matyushevskyy
 
PPT
Изучение интерфейсов операционных систем с помощью Embedded System
itconnect2016
 
DOCX
Lesson # 46. the main components of the application for the operating system ...
Nikolay Shaygorodskiy
 
PPTX
методика вивчення теми ос
Tamara Emec
 
PPTX
Лекція-Git-репозиторій-робота-з-гілками.pptx
ssuser78fc9e
 
PDF
Android Platform Architecture
Pavel Bashmakov
 
PPTX
FunctionGraph
Petro Novosad
 
PDF
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Пупена Александр
 
PPTX
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
Fwdays
 
PPTX
"Using AI to Automate Operational Processes at MK-Consulting", Maxim Korzhene...
Fwdays
 
PPTX
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv Startup Club
 
PPTX
Computers and Computing Works lecture №8
Lesia Sobolevska
 
PDF
лаб. роб. №2 обєкти та сервіси що ними надаються
cit-cit
 
ODP
Localizations foss ukr
Wad Mashckoff
 
PDF
Urok01
Irina Tabanets
 
PPTX
середовище виконання алгоритму
Захарова Олена
 
Lecture 06. iOS Programming. Основи Objective-C
Maksym Davydov
 
V24 com to_net
Ringonoki
 
Изучение интерфейсов операционных систем с помощью Embedded System
itconnect2016
 
Lesson # 46. the main components of the application for the operating system ...
Nikolay Shaygorodskiy
 
методика вивчення теми ос
Tamara Emec
 
Лекція-Git-репозиторій-робота-з-гілками.pptx
ssuser78fc9e
 
Android Platform Architecture
Pavel Bashmakov
 
FunctionGraph
Petro Novosad
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Пупена Александр
 
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
Fwdays
 
"Using AI to Automate Operational Processes at MK-Consulting", Maxim Korzhene...
Fwdays
 
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv Startup Club
 
Computers and Computing Works lecture №8
Lesia Sobolevska
 
лаб. роб. №2 обєкти та сервіси що ними надаються
cit-cit
 
Localizations foss ukr
Wad Mashckoff
 
середовище виконання алгоритму
Захарова Олена
 
Ad

iPhone Objective-C Development (ukr) (2009)

  • 1. Розробка на Objective-C для iPhone Анатолій Охотніков Softjourn, Inc.
  • 2. План  AppleiPhone  Мова Objective-C  Розробка для iPhone  Питання
  • 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 для не знайдених методів перед виключенням
  • 13. Виключення (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;
  • 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 повідомлення – Якщо створили іншим чином, то не робіть нічого
  • 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
  • 25. Сервіси 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
  • 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
  • 34. Побудова інтерфейсу  Interface Builder  "розетки" IBOutlet'и  Dependency Injection
  • 35. Hello World!  File -> New Project -> View Based Application @interface testViewController : UIViewController { IBOutlet UITextField *text1; IBOutlet UITextField *text2; } - (IBAction)copy:(id)sender; @end @implementation testViewController - (IBAction)copy:(id)sender { [text2 setText:[text1 text]]; }
  • 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
  • 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 країн)
  • 42. Посилання  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
  • 43. Питання? З питаннями та по інформацію звертатись: Анатолій Охотніков [email protected]