SlideShare a Scribd company logo
1 of 43
Download to read offline
Розробка на
          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
   Архітектура 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!

   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
Тестування

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

System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. ProcessesAndrii Hladkyi
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. ThreadsAndrii Hladkyi
 
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2eleksdev
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 
System programing module 1
System programing module 1System programing module 1
System programing module 1Andrii Hladkyi
 
Web service lecture
Web service lectureWeb service lecture
Web service lectureeleksdev
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5Andrii Hladkyi
 
NET Framework and C# Module 5. Interfaces
NET Framework and C# Module 5. InterfacesNET Framework and C# Module 5. Interfaces
NET Framework and C# Module 5. InterfacesAndrii Hladkyi
 
System programing module 2
System programing module 2System programing module 2
System programing module 2Andrii Hladkyi
 
07 Database Access
07 Database Access07 Database Access
07 Database Accesseleksdev
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasAllaGureva
 
System programing module 3
System programing module 3System programing module 3
System programing module 3Andrii Hladkyi
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. SerializationAndrii Hladkyi
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. MuzychushunHRdepartment
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Elantix
 
Windows service
Windows serviceWindows service
Windows serviceeleksdev
 

What's hot (20)

System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. Processes
 
DAL
DALDAL
DAL
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. Threads
 
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
System programing module 1
System programing module 1System programing module 1
System programing module 1
 
Web service lecture
Web service lectureWeb service lecture
Web service lecture
 
Net framework і c# module 5
Net framework і c# module 5Net framework і c# module 5
Net framework і c# module 5
 
NET Framework and C# Module 5. Interfaces
NET Framework and C# Module 5. InterfacesNET Framework and C# Module 5. Interfaces
NET Framework and C# Module 5. Interfaces
 
Rpc
RpcRpc
Rpc
 
1 4
1 41 4
1 4
 
System programing module 2
System programing module 2System programing module 2
System programing module 2
 
07 Database Access
07 Database Access07 Database Access
07 Database Access
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klas
 
System programing module 3
System programing module 3System programing module 3
System programing module 3
 
Tdd, ти де?
Tdd, ти де?Tdd, ти де?
Tdd, ти де?
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. Serialization
 
Php unit. Y. Muzychushun
Php unit. Y. MuzychushunPhp unit. Y. Muzychushun
Php unit. Y. Muzychushun
 
Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.Тестування при розробці програмного забезпечення. Unit Tests.
Тестування при розробці програмного забезпечення. Unit Tests.
 
Windows service
Windows serviceWindows service
Windows service
 

Viewers also liked (16)

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

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

Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CMaksym Davydov
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_netRingonoki
 
Изучение интерфейсов операционных систем с помощью Embedded System
Изучение интерфейсов операционных систем с помощью Embedded SystemИзучение интерфейсов операционных систем с помощью Embedded System
Изучение интерфейсов операционных систем с помощью Embedded Systemitconnect2016
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Nikolay Shaygorodskiy
 
методика вивчення теми ос
методика вивчення теми осметодика вивчення теми ос
методика вивчення теми осTamara Emec
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform ArchitecturePavel Bashmakov
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIПупена Александр
 
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk "Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk Fwdays
 
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”Lviv Startup Club
 
Computers and Computing Works lecture №8
Computers and Computing Works lecture №8Computers and Computing Works lecture №8
Computers and Computing Works lecture №8Lesia Sobolevska
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 
Localizations foss ukr
Localizations foss ukrLocalizations foss ukr
Localizations foss ukrWad Mashckoff
 
середовище виконання алгоритму
середовище виконання алгоритмусередовище виконання алгоритму
середовище виконання алгоритмуЗахарова Олена
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonPyCon Odessa
 

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

Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_net
 
ASP.Net MVC
ASP.Net MVCASP.Net MVC
ASP.Net MVC
 
Изучение интерфейсов операционных систем с помощью Embedded System
Изучение интерфейсов операционных систем с помощью Embedded SystemИзучение интерфейсов операционных систем с помощью Embedded System
Изучение интерфейсов операционных систем с помощью Embedded System
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...
 
методика вивчення теми ос
методика вивчення теми осметодика вивчення теми ос
методика вивчення теми ос
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
FunctionGraph
FunctionGraphFunctionGraph
FunctionGraph
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
 
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk "Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
"Vulnerabilities Analysis: Corporate DevSec Practices", Sergii Kulyk
 
сп
спсп
сп
 
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
Lviv MDDay 2014. Дмитро Андреєв “знайомство з .Net micro framework”
 
Computers and Computing Works lecture №8
Computers and Computing Works lecture №8Computers and Computing Works lecture №8
Computers and Computing Works lecture №8
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 
Localizations foss ukr
Localizations foss ukrLocalizations foss ukr
Localizations foss ukr
 
Urok01
Urok01Urok01
Urok01
 
04
0404
04
 
середовище виконання алгоритму
середовище виконання алгоритмусередовище виконання алгоритму
середовище виконання алгоритму
 
Retroscope
RetroscopeRetroscope
Retroscope
 
Alexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using PythonAlexey Borisenko - Network Programmability using Python
Alexey Borisenko - Network Programmability using Python
 

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 повідомлення – Якщо створили іншим чином, то не робіть нічого
  • 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
  • 24.
  • 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
  • 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 країн)
  • 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. Питання? З питаннями та по інформацію звертатись: Анатолій Охотніков aokhotnikov@softjourn.com