SlideShare a Scribd company logo
1 of 25
Cocoa Design
  Patterns
  Stewart Gleadow
   February 2010
Timeline
 1976       1980     1986 1988       1996       2000        2007     2011

                                      Apple                iPhone
Original           Objective C
                                     acquires               mania
Smalltalk
                                      NeXT
                            NeXT
                             &                  OS X                  Mac
      Commerically
                          NeXTSTEP                &                   app
        licensed
                                                Cocoa                store
        Smalltalk

                                                        Objective C 2.0
C

Objective C
Objective C Syntax
Definition:

- (void)textDidChangeFrom:(NSString *)old to:(NSString *)newText;
{



}

Calling:

[textField textDidChangeFrom:@”old text” to:@”new text”];
?
Template
   MVC                     Enumerators     Proxy
               Method


                                         Targets &
 Flyweight    Singleton     Delegates
                                          Actions


                           Responder
Notifications Hierarchies                 Invocations
                             Chain
Template
   MVC                     Enumerators
                             Iterator         Proxy
               Method


                                            Targets &
 Flyweight    Singleton     Delegates
                                             Actions


                           Responder
                           Chain of
Notifications Hierarchies
 Obser ver    Composite    Responsibility   Invocations
                                             Command
                             Chain
Template
   MVC                     Enumerators
                             Iterator         Proxy
               Method


                                            Targets &
 Flyweight    Singleton     Delegates
                                             Actions


                           Responder
                           Chain of
Notifications Hierarchies
 Obser ver    Composite    Responsibility   Invocations
                                             Command
                             Chain
Template Method
MyView.h
#import <UIKit/UIKit.h>

@interface MyView : UIView
{
  // instance variables go here
}

@end
Template Method
MyView.m
#import "MyView.h"


@implementation MyView

- (void)drawRect:(CGRect)rect;
{
  // Drawing code.
}

@end
Delegate

@protocol TTURLRequestDelegate <NSObject>

  @optional
- (void)requestDidStartLoad:(TTURLRequest*)request;

- (void)requestDidFinishLoad:(TTURLRequest*)request;

@end
Delegate
@implementation MyDelegate

- (void)requestDidStartLoad:(TTURLRequest*)request;
{
  // start loading indicator?
}

- (void)requestDidFinishLoad:(TTURLRequest*)request;
{
  // stop loading indicator
  // do something awesome
}

@end
Delegate

TTURLRequest *request;

request = [TTURLRequest requestWithURL:url delegate:myDelegate];
Targets & Actions

UIButton *addButton;
addButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button addTarget:myButtonReceiver
           action:@selector(addButtonWasPressed:)
 forControlEvents:UIControlEventTouchUpInside];
Enumerator
Proxy
Flyweight
Singleton
[[UIApplication sharedApplication] delegate];
Notifications
     &
 Invocations
More?
•   Cocoa Design Patterns, by Erik M.
    Buck, Donald A.Yacktman

•   (Advanced) Cocoa Programming
    for Mac OS X - Aaron Hillegass

•   Apple Developer Docs (http://
    developer.apple.com)

•   CocoaHeads (http://
    groups.google.com/group/
    cocoaheadsau)
Stewart Gleadow
    Thoughtworks

sgleadow@thoughtworks.com

      @stewgleadow

More Related Content

What's hot

Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionDinesh Sharma
 
Gnizr Architecture (for developers)
Gnizr Architecture (for developers)Gnizr Architecture (for developers)
Gnizr Architecture (for developers)hchen1
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIAnton Keks
 
iOS viper presentation
iOS viper presentationiOS viper presentation
iOS viper presentationRajat Datta
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsLalit Kale
 
Distributing information on iOS
Distributing information on iOSDistributing information on iOS
Distributing information on iOSMake School
 
9 crucial Java Design Principles you cannot miss
9 crucial Java Design Principles you cannot miss9 crucial Java Design Principles you cannot miss
9 crucial Java Design Principles you cannot missMark Papis
 
Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaFilip Krikava
 
01 introduction to struts2
01 introduction to struts201 introduction to struts2
01 introduction to struts2Smita B Kumar
 
Hibernate ppt
Hibernate pptHibernate ppt
Hibernate pptAneega
 
Dependency Injection Inversion Of Control And Unity
Dependency Injection Inversion Of Control And UnityDependency Injection Inversion Of Control And Unity
Dependency Injection Inversion Of Control And Unityrainynovember12
 

What's hot (18)

Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
 
Gnizr Architecture (for developers)
Gnizr Architecture (for developers)Gnizr Architecture (for developers)
Gnizr Architecture (for developers)
 
Java Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUIJava Course 14: Beans, Applets, GUI
Java Course 14: Beans, Applets, GUI
 
iOS viper presentation
iOS viper presentationiOS viper presentation
iOS viper presentation
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
OOP design patterns
OOP design patternsOOP design patterns
OOP design patterns
 
Jump Start To Ooad And Design Patterns
Jump Start To Ooad And Design PatternsJump Start To Ooad And Design Patterns
Jump Start To Ooad And Design Patterns
 
Distributing information on iOS
Distributing information on iOSDistributing information on iOS
Distributing information on iOS
 
9 crucial Java Design Principles you cannot miss
9 crucial Java Design Principles you cannot miss9 crucial Java Design Principles you cannot miss
9 crucial Java Design Principles you cannot miss
 
Model Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in ScalaModel Manipulation Using Embedded DSLs in Scala
Model Manipulation Using Embedded DSLs in Scala
 
Core Data
Core DataCore Data
Core Data
 
Advance Java
Advance JavaAdvance Java
Advance Java
 
Design pattern
Design patternDesign pattern
Design pattern
 
01 introduction to struts2
01 introduction to struts201 introduction to struts2
01 introduction to struts2
 
Hibernate ppt
Hibernate pptHibernate ppt
Hibernate ppt
 
Dependency Injection Inversion Of Control And Unity
Dependency Injection Inversion Of Control And UnityDependency Injection Inversion Of Control And Unity
Dependency Injection Inversion Of Control And Unity
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Akka (BeJUG)
Akka (BeJUG)Akka (BeJUG)
Akka (BeJUG)
 

Similar to Cocoa Design Patterns

Spring MVC introduction HVA
Spring MVC introduction HVASpring MVC introduction HVA
Spring MVC introduction HVAPeter Maas
 
Behavioral Reflection
Behavioral ReflectionBehavioral Reflection
Behavioral ReflectionMarcus Denker
 
ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentVolodymyr Voytyshyn
 
JavaScript 101
JavaScript 101JavaScript 101
JavaScript 101ygv2000
 
Orchestration & provisioning
Orchestration & provisioningOrchestration & provisioning
Orchestration & provisioningbuildacloud
 
Summer Training In Dotnet
Summer Training In DotnetSummer Training In Dotnet
Summer Training In DotnetDUCC Systems
 
Summer training in dotnet
Summer training in dotnetSummer training in dotnet
Summer training in dotnetDUCC Systems
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaYi-Shou Chen
 
Spring 3 MVC CodeMash 2009
Spring 3 MVC   CodeMash 2009Spring 3 MVC   CodeMash 2009
Spring 3 MVC CodeMash 2009kensipe
 
Serenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringSerenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringFrancisco Sanchez Cid
 
Project kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaProject kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaSkills Matter Talks
 
Consolidated shared indexes in real time
Consolidated shared indexes in real timeConsolidated shared indexes in real time
Consolidated shared indexes in real timeJeff Mace
 
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your applicationjavablend
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
 
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012Alexandre Morgaut
 
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Alexandre Morgaut
 
Microsoft HPC User Group
Microsoft HPC User Group Microsoft HPC User Group
Microsoft HPC User Group sjwoodman
 
MVC/DCI in NetBeans by Jaroslav Tulach
MVC/DCI in NetBeans by  Jaroslav TulachMVC/DCI in NetBeans by  Jaroslav Tulach
MVC/DCI in NetBeans by Jaroslav Tulachguestb9a4bf
 

Similar to Cocoa Design Patterns (20)

Spring MVC introduction HVA
Spring MVC introduction HVASpring MVC introduction HVA
Spring MVC introduction HVA
 
Behavioral Reflection
Behavioral ReflectionBehavioral Reflection
Behavioral Reflection
 
ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web development
 
JavaScript 101
JavaScript 101JavaScript 101
JavaScript 101
 
Introducing spring
Introducing springIntroducing spring
Introducing spring
 
Orchestration & provisioning
Orchestration & provisioningOrchestration & provisioning
Orchestration & provisioning
 
Summer Training In Dotnet
Summer Training In DotnetSummer Training In Dotnet
Summer Training In Dotnet
 
Summer training in dotnet
Summer training in dotnetSummer training in dotnet
Summer training in dotnet
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoa
 
Spring 3 MVC CodeMash 2009
Spring 3 MVC   CodeMash 2009Spring 3 MVC   CodeMash 2009
Spring 3 MVC CodeMash 2009
 
Serenity Project: Security in Software Enginering
Serenity Project: Security in Software EngineringSerenity Project: Security in Software Enginering
Serenity Project: Security in Software Enginering
 
Project kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scalaProject kepler compile time metaprogramming for scala
Project kepler compile time metaprogramming for scala
 
Consolidated shared indexes in real time
Consolidated shared indexes in real timeConsolidated shared indexes in real time
Consolidated shared indexes in real time
 
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application
[Pilarczyk] Adrenaline programing implementing - SOA and BPM in your application
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
 
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
 
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
 
Microsoft HPC User Group
Microsoft HPC User Group Microsoft HPC User Group
Microsoft HPC User Group
 
Asp.Net MVC3 - Basics
Asp.Net MVC3 - BasicsAsp.Net MVC3 - Basics
Asp.Net MVC3 - Basics
 
MVC/DCI in NetBeans by Jaroslav Tulach
MVC/DCI in NetBeans by  Jaroslav TulachMVC/DCI in NetBeans by  Jaroslav Tulach
MVC/DCI in NetBeans by Jaroslav Tulach
 

More from sgleadow

Evolving Mobile Architectures @ Mi9
Evolving Mobile Architectures @ Mi9Evolving Mobile Architectures @ Mi9
Evolving Mobile Architectures @ Mi9sgleadow
 
Evolving for Multiple Screens
Evolving for Multiple ScreensEvolving for Multiple Screens
Evolving for Multiple Screenssgleadow
 
Mobile: more than just an app
Mobile: more than just an appMobile: more than just an app
Mobile: more than just an appsgleadow
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architecturessgleadow
 
Building mobile teams and getting a product to market
Building mobile teams and getting a product to marketBuilding mobile teams and getting a product to market
Building mobile teams and getting a product to marketsgleadow
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testingsgleadow
 
iOS app case study
iOS app case studyiOS app case study
iOS app case studysgleadow
 
iOS View Coordinators
iOS View CoordinatorsiOS View Coordinators
iOS View Coordinatorssgleadow
 
Frank iOS Testing
Frank iOS TestingFrank iOS Testing
Frank iOS Testingsgleadow
 
Multithreaded Data Transport
Multithreaded Data TransportMultithreaded Data Transport
Multithreaded Data Transportsgleadow
 
A few design patterns
A few design patternsA few design patterns
A few design patternssgleadow
 
GPU Programming
GPU ProgrammingGPU Programming
GPU Programmingsgleadow
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Developmentsgleadow
 

More from sgleadow (14)

Evolving Mobile Architectures @ Mi9
Evolving Mobile Architectures @ Mi9Evolving Mobile Architectures @ Mi9
Evolving Mobile Architectures @ Mi9
 
Evolving for Multiple Screens
Evolving for Multiple ScreensEvolving for Multiple Screens
Evolving for Multiple Screens
 
Mobile: more than just an app
Mobile: more than just an appMobile: more than just an app
Mobile: more than just an app
 
Evolving Mobile Architectures
Evolving Mobile ArchitecturesEvolving Mobile Architectures
Evolving Mobile Architectures
 
Building mobile teams and getting a product to market
Building mobile teams and getting a product to marketBuilding mobile teams and getting a product to market
Building mobile teams and getting a product to market
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testing
 
iOS app case study
iOS app case studyiOS app case study
iOS app case study
 
Agile iOS
Agile iOSAgile iOS
Agile iOS
 
iOS View Coordinators
iOS View CoordinatorsiOS View Coordinators
iOS View Coordinators
 
Frank iOS Testing
Frank iOS TestingFrank iOS Testing
Frank iOS Testing
 
Multithreaded Data Transport
Multithreaded Data TransportMultithreaded Data Transport
Multithreaded Data Transport
 
A few design patterns
A few design patternsA few design patterns
A few design patterns
 
GPU Programming
GPU ProgrammingGPU Programming
GPU Programming
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Development
 

Cocoa Design Patterns

Editor's Notes

  1. - cocoa / objective C: timeline and history\n- Objective C language primer (not too much syntax) -&gt; get a feel for language\n- look at common design patterns in the cocoa world\n
  2. relevant to Objective C, Cocoa and Design Patterns\n- smalltalk, graphical OS, popup menus\n
  3. Inventors of ObjC worked with Smalltalk in the early 80s\nObjective C aimed at adding some of Smalltalk&amp;#x2019;s capabilities to C\nThere is a GNU project for the OpenStep standard (but mainly just Apple)\n\n
  4. - strict superset of C -&gt; may only write UI layer in Objective C\n- adds SmallTalk style messaging (over C++ block style)\n- runtime small in size, but some overhead\n- performSelector and respondsToSelector\n- uses header files, C structs, function pointers\n
  5. - multiple arguments (~ named)\n- strings different for compatibility with C\n
  6. Native libraries for OS X, written in Objective C\nUsually built with XCode and Interface Builder\nBridges for Java/Python/Ruby and a few others\n
  7. Well thought out and designed library, plenty of design patterns.\nOften not well used.\n
  8. Apple often uses their own names\n\n
  9. \n
  10. - common functionality implemented once\n- allow client code to modify behaviour\n&amp;#x201C;don&amp;#x2019;t call us, we&amp;#x2019;ll call you&amp;#x201D;\n- delegate: like a single observer, using a protocol\n- set target and action for events, like button tap\n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. - implementing the default NSEnumerable protocol means can be used by the inbuilt for loops\n- blocks in Objective C 2.0\n
  19. - message passing makes this fairly easy to implement\nrespondsToSelector\nperformSelector\n
  20. - Objective C strict superset of C\n- wrapping primitive objects, no auto-boxing\n- access to Carbon APIs\n
  21. - can be used and abused\n- Cocoa seems to use it fairly well\n- iPhone users tent to abuse it -&gt; easy global storage\n\n
  22. - observer/command\n- becomes easier because of KVC/KVO and dynamic message passing\n- debugging? clarity?\n
  23. \n
  24. \n
  25. \n