iOS (7) Workshop

863 views

Published on

Presentation slides for a introductory workshop on iOS.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
863
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
44
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

iOS (7) Workshop

  1. 1. iOS (7) Workshop
  2. 2. Model-View-Controller View Model Controller UpdateUser Action NotifyUpdate
  3. 3. ModelView Controller
  4. 4. 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...
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. Delegate
  10. 10. User taps Delegate
  11. 11. User taps shouldSelectItemAtIndexPath: Delegate
  12. 12. User taps shouldSelectItemAtIndexPath: Delegate YES
  13. 13. 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
  14. 14. Data Source
  15. 15. View starts loading Data Source
  16. 16. View starts loading numberOfSectionsInCollectionView: Data Source
  17. 17. View starts loading numberOfSectionsInCollectionView: Data Source1
  18. 18. View starts loading Data Source numberOfItemsInSection:0
  19. 19. View starts loading Data Source numberOfItemsInSection:0 7
  20. 20. View starts loading Data Source cellForItemAtIndexPath:
  21. 21. View starts loading Data Source cellForItemAtIndexPath: Cell View
  22. 22. View starts loading Data Source cellForItemAtIndexPath: Cell View
  23. 23. 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:
  24. 24. 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
  25. 25. Objective-C • 1983 • Stepstone -> NeXT -> Apple • ObjC = C + Smalltalk • Object-oriented, reflective • OSX (Cocoa), iOS (Cocoa Touch)
  26. 26. 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”;
  27. 27. 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
  28. 28. Basics • (Almost) all C/C++-stuff (if, for, while,...) • Pointers (*) to objects. • Pointer = reference to another value in memory [instance message:argument1 otherParameter:argument2];
  29. 29. Stuff0x3DE2FE Basics
  30. 30. Stuff0x3DE2FE Basics
  31. 31. Stuff0x3DE2FE Basics
  32. 32. Object* Stuff0x3DE2FE Basics
  33. 33. .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)
  34. 34. 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)
  35. 35. 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;
  36. 36. • 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
  37. 37. @interface MyType : NSObject<MyProtocol> @end @protocol MyProtocol - (void)myMandatoryMessage; @optional - (void)myOptionalMessage; @end Protocols
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. 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)
  42. 42. 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
  43. 43. self.square.backgroundColor = [UIColor redColor]; ... - (void)animate:(id)sender { [UIView animateWithDuration:3.0 animations:^{ self.square.backgroundColor = [UIColor greenColor]; }]; } Blocks
  44. 44. Demo github.com/fbernardo/fct_ios_workshop/releases
  45. 45. Thank you @fbbernardo @PragmaPilot

×