ios (7) workshop

47
iOS (7) Workshop

Post on 11-Sep-2014

598 views

Category:

Technology


2 download

DESCRIPTION

Presentation slides for a introductory workshop on iOS.

TRANSCRIPT

  • iOS (7)Workshop

  • Model-View-Controller

    View Model

    ControllerUpdateUser Action

    NotifyUpdate

  • ModelView Controller

  • V M

    CViews 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 its 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...

  • View Controllers Each view controller organizes and controls a view. A view controller owns its 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

  • 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 its parent.

    V M

    C

  • Collection View Controller Contains and manages its 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 its collection view.

    V M

    C

  • Delegation Or acting on behalf/at the request of another object. The delegating object sends a message to its 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

  • Delegate

  • User taps

    Delegate

  • User taps shouldSelectItemAtIndexPath:

    Delegate

  • User taps shouldSelectItemAtIndexPath:

    DelegateYES

  • Data Source Its 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

  • Data Source

  • View startsloading

    Data Source

  • View startsloading numberOfSectionsInCollectionView:

    Data Source

  • View startsloading numberOfSectionsInCollectionView:

    Data Source1

  • View startsloading

    Data Source

    numberOfItemsInSection:0

  • View startsloading

    Data Source

    numberOfItemsInSection:0

    7

  • View startsloading

    Data Source

    cellForItemAtIndexPath:

  • View startsloading

    Data Source

    cellForItemAtIndexPath:

    Cell View

  • View startsloading

    Data Source

    cellForItemAtIndexPath:

    Cell View

  • Application Delegate A custom object created for you at app launch time. Its primary job is to handle state transitions within the app. Example: application:didFinishLaunching:

  • Storyboards V MC 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

  • Objective-C 1983 Stepstone -> NeXT -> Apple ObjC = C + Smalltalk Object-oriented, reflective OSX (Cocoa), iOS (Cocoa Touch)

  • BasicsObjective-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;

  • BasicsObjective-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

  • Basics (Almost) all C/C++-stuff (if, for, while,...) Pointers (*) to objects. Pointer = reference to another value in memory

    [instance message:argument1 otherParameter:argument2];

  • Stu0x3DE2FE

    Basics

  • Stu0x3DE2FE

    Basics

  • Stu0x3DE2FE

    Basics

  • Object* Stu0x3DE2FE

    Basics

  • .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)

  • 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)

  • 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;

  • 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

  • @interface MyType : NSObject

    @end

    @protocol MyProtocol- (void)myMandatoryMessage;@optional- (void)myOptionalMessage;@end

    Protocols

  • 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

  • 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

  • Collections Store things Jumble! (can mix Strings with Numbers with Astrocreeps...) Arrays, Dictionary, Sets Immutable: once set cant change (NSArray, NSDictionary, NSSet) Mutable: can change (NSMutableArray, NSMutableDictionary, NSMutableSet)

    Sort, filter, query, enumerate, map & other cool stuff

  • 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)

  • 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

  • self.square.backgroundColor = [UIColor redColor];

    ...

    - (void)animate:(id)sender{ [UIView animateWithDuration:3.0 animations:^{ self.square.backgroundColor = [UIColor greenColor]; }];}

    Blocks

  • Demogithub.com/fbernardo/fct_ios_workshop/releases

  • Thank you@fbbernardo @PragmaPilot