Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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.

Tomas Jukin

April 18, 2012
Tweet

More Decks by Tomas Jukin

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. Objective-C • C • C++ • Objective-C Tomáš Jukin -

    Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. Podobnost s C# • Properties Tomáš Jukin - Seminář vývoje

    iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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ěžovat Tomáš Jukin - Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill
  23. 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
  24. 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
  25. 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)
  26. 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
  27. 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
  28. 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
  29. Děkuji za pozornost Dotazy? Tomáš Jukin @Inza Tomáš Jukin -

    Seminář vývoje iOS aplikací 1/3 Juicymo (www.juicymo.cz) @JuicymoCZ iKnowClub ČVUT SilliconHill