30
Seminář vývoje iOS aplikací 1/3 Tomáš Jukin @Inza Juicymo www.juicymo.cz @JuicymoCZ iKnowClub ČVUT SilliconHill

iKnowClub ČVUT - Seminář vývoje iOS aplikací

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.

Citation preview

Page 1: iKnowClub ČVUT - Seminář vývoje iOS aplikací

Seminář vývoje iOS aplikací 1/3

Tomáš Jukin @Inza

Juicymo www.juicymo.cz @JuicymoCZ

iKnowClub ČVUT SilliconHill

Page 2: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 3: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 4: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 5: iKnowClub ČVUT - Seminář vývoje iOS aplikací

Objective-C

• C• C++• Objective-C

Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ

iKnowClub ČVUT SilliconHill

Page 6: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 7: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 8: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 9: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 10: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 11: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 12: iKnowClub ČVUT - Seminář vývoje iOS aplikací

Podobnost s C#

• Properties

Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ

iKnowClub ČVUT SilliconHill

Page 13: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 14: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 15: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 16: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 17: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 18: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 19: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 20: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 21: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 22: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 23: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 24: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 25: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 26: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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)

Page 27: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 28: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 29: iKnowClub ČVUT - Seminář vývoje iOS aplikací

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

Page 30: iKnowClub ČVUT - Seminář vývoje iOS aplikací

Děkuji za pozornostDotazy?

Tomáš Jukin @Inza

Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ

iKnowClub ČVUT SilliconHill