Upload
tomas-jukin
View
1.298
Download
0
Embed Size (px)
DESCRIPTION
Lehký úvod do problematiky jazyka Objective-C a Vývoje iOS aplikací.Prezentace zazněla na první části Semináře vývoje iOS aplikací, který autor pořádal v dubnu 2012 v rámci iKnowClub ČVUT (http://cvut.iknow.eu). Více informací najdete na http://srazy.info/seminar-vyvoje-ios-aplikaci.
Seminář vývoje iOS aplikací 1/3
Tomáš Jukin @Inza
Juicymo www.juicymo.cz @JuicymoCZ
iKnowClub ČVUT SilliconHill
Osnova
• Co znamená vývoj pro iOS?
• Objective-C
• Xcode IDE
• Architektura iOS aplikace
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Vývoj pro iOS
• MacOS (alternativy?)
• MacBook/iMac
• Xcode (alternativy?)
• Objective-C (MacOS i iOS)
• Apple Developer Account
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Ekosystém
• Objective-C 2.0
• Cocoa Touch
• iOS 5.1
• Testování a zařízení
• Simulátor
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Objective-C
• C• C++• Objective-C
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Objective-C• Kompilovaný
• Staticky typovaný
• OOP
• Prostředí = virtuální stroj
• Správa paměti
• Zásobníková & počítání referencí
• GC (od Objective-C 2.0)
• ARC (v LLVM 3.0)
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Objective-C• Jednonásobná dědičnost
• C bloky
• Hlavičkové soubory
• .h
• .m
• Kompilace:
1. kompilátor -> .o
2. linker -> .app
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Objective-C
• Přímá podpora C
• Podpora C++ na úrovni kompilace
• .mm
• LLVM 3
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Objective-C 2.0
• GC
• Properties
• Fast Enumeration
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Podobnost s C++
• Linkování (.h a .m soubory)
• Nutnost řešit správu paměti (na iOS není GC, lepší situace díky ARC)
• ARC není GC!
• Žádná pointerová aritmetika
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Podobnost s Javou
• Bezpečné (skoro, ve smyslu paměti/pointerů, vůči C++)
• Komfort (větší než C++)
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Podobnost s C#
• Properties
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Syntax
• pokud je v proměnné auto instance třídy Auto pak
• místo auto.jed();
• píšeme [auto jed];
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Syntax
• pokud je v proměnné auto instance třídy Auto pak
• místo auto.jed(“dopredu”, “rychle”);
• píšeme [auto jed:”dopredu” sRychlosti:”rychle”];
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Syntax
• Definice metody jed() třídy Auto:
• místo public void jed(String smer, String rychlost) { ... }
• píšeme - (void)jed:(NSString *)aSmer sRychlosti:(NSString *)aRychlost { ... }
• na správné místo (do třídy) - “a la Java”
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP• Třídy a instance
• Statické a dynamické (instanční)
• Třída:
• @interface a @implementation
• inicializátory
• metody
• attributy - ivars (privátní/protected)
• accessory attributů - properties (veřejné)
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP
• Neexistuje abstract
• Neexistuje protected (na úrovni metod a properties)
• Ale máme .h a .m a linker
• -> tudíž to “obcházíme” pomocí více .h souborů a class extensions
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - Abstract & Protected
• API = metody & properties, eventuelně ivars
• Public API - v Auto.h (class interface)
• Protected API (pokud je třeba) - v Auto_protected.h (class extension)
• Private API - v Auto.m nad @implementation (class extension)
• Abstract API - Součást Protected/Public API, manuální vyhození vyjímky
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - Inicializátory
• metoda init()
• metody initWithXXX()
• je to konstruktor
• voláme [[Auto alloc] init];
• vrátí nám novou instanci třídy Auto
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - ivars
• jsou to atributy (zde jsou attributy tříd fyzicky uloženy, pokud jsou uloženy)
• jsou private nebo protected, nikdy public
• Objective-C je občas/často dělá za nás
• toho se snažíme využívat
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - ivars
@interface Auto : DopravniProstredek{ NSArray *_kola; BOOL _rozbite;@protected NSString *_spz;}@end
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - Properties• Mechanizmus publikování ivars
• jsou to “gettery” a “settery”
• definice a implementace
• @property a @syntetize
• jsou vždy public
• pomocí triku s .h soubory a linkováním mohou být public, protected i private
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - Properties• definují se v @interface
• class (třídě)
• category (kategorii)
• class extension (rozšíření třídy)
• Objective-C umí k property vygenerovat příslušnou ivar
• Možno přetěžovatTomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
OOP - Properties
@interface Auto : DopravniProstredek{ NSArray *_kola; BOOL _rozbite;@protected NSString *_spz;}@end
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
• v .h máme
OOP - Properties
@property (nonatomic, strong) NSArray *kola;@property (nonatomic, assign, getter=jeRozbite) BOOL rozbite;
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
• v @interface (za } před @end) v .h
OOP - Properties
@syntetize kola = _kola;@syntetize rozbite = _rozbite;
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
• v @implementation v .m (typicky)
Zbytek v praxi!
• Nyní živá ukázka vývoje!
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Co jsme probrali?
• Ukázka jak udělat iOS aplikaci v Xcode
• Popis interface Xcode
• Ukázka jak udělat Private API a Public API třídy
• Ukázka nástroje Interface Builder
• Ukázka vložení tlačítka do aplikace a jeho zprovoznění
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Příště?
• Zopakování toho, jak udělat Private API a Public API třídy
• Ukázka Protected a Abstract API
• Ukázka práce s UITableView
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill
Děkuji za pozornostDotazy?
Tomáš Jukin @Inza
Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ
iKnowClub ČVUT SilliconHill