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

iOS 7 Workshop

iOS 7 Workshop

iOS (7) and Objective-C introductory lecture.
9th October 2013 @ Faculdade de Ciências e Tecnologia (NINF)
Co-speaker: Fábio Bernardo (https://speakerdeck.com/fbernardo/)

#pragmapilot

October 09, 2013
Tweet

Other Decks in Programming

Transcript

  1. V M C Views • Defines a rectangular region on

    the screen and handles the drawing and touch events in that region. • Every application has at least one view (the window) for presenting it’s content. • A view can also act as a parent for other views and coordinate the placement and sizing of those views. • Examples: Buttons, Navigation Bars, Alerts, Table View Cells, etc...
  2. View Controllers • Each view controller organizes and controls a

    view. • A view controller owns it’s view. It takes care of all user actions, animations, updating the view, etc... • Just like Views, Controllers can act as parents of other Controllers. V M C
  3. Navigation Controller • A Controller that manages the navigation of

    hierarchical content. • You can push/pop view controllers into/from the Navigation Controller. • Each time you add a view controller to the hierarchy the Navigation Controller becomes it’s parent. V M C
  4. Collection View Controller • Contains and manages it’s collection view

    (each controller has a root view, remember?). • Usually you subclass it to add your custom behavior. • By default it is the delegate and datasource of it’s collection view. V M C
  5. Delegation • Or acting on behalf/at the request of another

    object. • The delegating object sends a message to it’s delegate telling it some event is about to happen and asks for some response. • Delegation is a means for injecting specific behavior in the workings of a framework class — without having to subclass it. V M C
  6. Data Source • It’s like a delegate except that, instead

    of being delegated control of the UI, it is delegated control of the data. • Responsible for managing the memory of the model objects they give to the delegating view. V M C
  7. Application Delegate • A custom object created for you at

    app launch time. • It’s primary job is to handle state transitions within the app. • Example: application:didFinishLaunching:
  8. Storyboards V M C • Big canvas where you lay

    out your app screens and transitions • Trees of view controllers in a serialized form • Storyboards = Scenes (VCs) + Segues (transitions) • Good for a conceptual overview of the app • Bad for apps with lots of VCs or iPad apps (HUGE views...) • Limitations: Storyboards < XIBs < Code
  9. Objective-C • 1983 • Stepstone -> NeXT -> Apple •

    ObjC = C + Smalltalk • Object-oriented, reflective • OSX (Cocoa), iOS (Cocoa Touch)
  10. Basics Objective-C Java char b = 0; byte b =

    0; int i = 0; int i = 0; float f = 0; float f = 0; double d = 0; double d = 0; BOOL b = YES; // NO boolean b = true; // false char c = ‘c’; char c = ‘c’; NSObject *o = [[NSObject alloc] init]; Object o = new Object(); NSString *s = @”string”; String s = “string”;
  11. Basics Objective-C Java #import “MyType.h” import me.app.MyType; - (void)method; public

    void method() { ... } + (void)method; static public void method() { ... } const, (...readonly...) final static static package nil null
  12. Basics • (Almost) all C/C++-stuff (if, for, while,...) • Pointers

    (*) to objects. • Pointer = reference to another value in memory [instance message:argument1 otherParameter:argument2];
  13. .h & .m • ObjC type = interface + implementation

    • .h: header file, type contract to the outside world @implementation MyType - (void)myMessage:(int)myParam { // Do stuff... } @end @interface MyType - (void)myMessage:(int)myParam; @end • .m: messages (old stuff) file, implementation (actual code)
  14. Messages • Message: just a fancy name for a method

    call • Interpreted in runtime: objects decide if they respond to messages • self = this object (can message self) • super = base (parent) object (can message super)
  15. Properties • Syntactic sugar on instance variables • Clang generates

    setters and getters automatically (it was not always like this) • Atomic by default! (use nonatomic to remove lock) @property (nonatomic, copy) NSString *myProperty;
  16. • Protocol: just a fancy name for an interface (defines

    an expected behaviour) • Messages and properties can be mandatory or optional • Used in the delegate pattern: “will ask somebody (the delegate) something” Protocols
  17. Categories • Category: allows to extend a class without inheritance

    • Add new messages without recompile! • Warning: existing messages can be “replaced”. Category messages take precedence. • Similar to .NETs extension methods
  18. Categories @implementation UIColor (MyColors) + (UIColor*)myAwesomeColor { return ...; }

    + (UIColor*)blackColor { // I told ya... return [UIColor redColor]; } @end @interface UIColor (MyColors) + (UIColor*)myAwesomeColor; + (UIColor*)blackColor; // Oops! @end
  19. Collections • Store “things” • Jumble! (can mix Strings with

    Numbers with Astrocreeps...) • Arrays, Dictionary, Sets • Immutable: once set can’t change (NSArray, NSDictionary, NSSet) • Mutable: can change (NSMutableArray, NSMutableDictionary, NSMutableSet) • Sort, filter, query, enumerate, map & other cool stuff
  20. Memory • Instantiate new object: MyType *myType = [[MyType alloc]

    init]; • Reference count: keep track of the number of instances. If 0 deallocate object • ARC does retain/release for you automatically. • References: strong (retain), weak, copy (new immutable object)
  21. Blocks • Closures: fancy name for functions that can be

    passed around like data • Key to lots of ObjC features: collection enumeration, Grand Central Dispatch (threads), animations • Explicit or inline definition • Context variable must be marked with __block if changed within block
  22. self.square.backgroundColor = [UIColor redColor]; ... - (void)animate:(id)sender { [UIView animateWithDuration:3.0

    animations:^{ self.square.backgroundColor = [UIColor greenColor]; }]; } Blocks