SlideShare una empresa de Scribd logo
1 de 156
iOS Development
iOS Development
• About Me:
 • Pat Zearfoss
 • Mindgrub Technologies, LLC
 • BS Computer Science - UMBC 2008
 • Working with mobile and iOS for 3
   years.
iOS Development

• Web:
    pzearfoss@gmail.com
    http://zearfoss.wordpress.com
    @pzearfoss
    http://www.github.com/pzearfoss
Development Options
Development Options




HTML 5
Development Options




HTML 5   Cross Platform
Development Options




HTML 5   Cross Platform   Native
HTML 5
HTML 5
• Use the technologies you already know.
HTML 5
• Use the technologies you already know.
• Can be loaded into an app webview and
  distributed on the app store.
HTML 5
• Use the technologies you already know.
• Can be loaded into an app webview and
  distributed on the app store.
• Limited use of device hardware.
HTML 5
• Use the technologies you already know.
• Can be loaded into an app webview and
  distributed on the app store.
• Limited use of device hardware.
• Cross Platform
HTML 5
• Use the technologies you already know.
• Can be loaded into an app webview and
  distributed on the app store.
• Limited use of device hardware.
• Cross Platform
 • Except for all the cross browser
    problems you already know and love.
Cross Platform
Frameworks
Cross Platform
       Frameworks
• Titanium, PhoneGap, Others
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
• Titanium generates native code.
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
• Titanium generates native code.
• PhoneGap uses web code in a webview.
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
• Titanium generates native code.
• PhoneGap uses web code in a webview.
• Better use of device hardware.
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
• Titanium generates native code.
• PhoneGap uses web code in a webview.
• Better use of device hardware.
• “Cross Platform”
Cross Platform
        Frameworks
• Titanium, PhoneGap, Others
• Use the technologies you already know.
• Titanium generates native code.
• PhoneGap uses web code in a webview.
• Better use of device hardware.
• “Cross Platform”
 • Your mileage may vary.
Native
Native
• Offers the most control over your product.
Native
• Offers the most control over your product.
• Access to all device frameworks.
Native
• Offers the most control over your product.
• Access to all device frameworks.
• Requires Objective-C
Native
• Offers the most control over your product.
• Access to all device frameworks.
• Requires Objective-C
• Only runs on iOS (obviously)
Native
• Offers the most control over your product.
• Access to all device frameworks.
• Requires Objective-C
• Only runs on iOS (obviously)
• Will generally run with the absolute best
  performance.
Xcode
• Download from App Store
                            $4.99 Download
Xcode
• Download from App Store
                            $4.99 Download
Xcode
• Download from App Store
                            $4.99 Download




                            4.1 is now free
Getting Started
Getting Started

• Things you should know
Getting Started

• Things you should know
 • Classical OO
Getting Started

• Things you should know
 • Classical OO
   • Classes
Getting Started

• Things you should know
 • Classical OO
   • Classes
   • Inheritance
Getting Started

• Things you should know
 • Classical OO
   • Classes
   • Inheritance
   • Polymorphism
Getting Started
Getting Started

• Recommended but not required
Getting Started

• Recommended but not required
 • Some knowledge of C
Getting Started

• Recommended but not required
 • Some knowledge of C
   • malloc() . . . free() ?
Getting Started

• Recommended but not required
 • Some knowledge of C
   • malloc() . . . free() ?
 • Some knowledge of design patterns:
Getting Started

• Recommended but not required
 • Some knowledge of C
   • malloc() . . . free() ?
 • Some knowledge of design patterns:
   • MVC, Singleton, Delegation
Objective-C in 10
    minutes
About Objective-C
About Objective-C
• Object Oriented superset over C
About Objective-C
• Object Oriented superset over C
                 Standard C
About Objective-C
• Object Oriented superset over C
                 Standard C


                 Objective-C
About Objective-C
• Object Oriented superset over C
                  Standard C


                  Objective-C



• Anything that works in C will work in
  Objective-C
Obj-C in 10 minutes
Obj-C in 10 minutes
• All the things you know from C
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
 • int, float, double, char
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
 • int, float, double, char
  int foo = 5;
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
 • int, float, double, char
  int foo = 5;

 • Separate compilation
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
 • int, float, double, char
  int foo = 5;

 • Separate compilation
  • .h for interface declaration
Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
 • int, float, double, char
  int foo = 5;

 • Separate compilation
  • .h for interface declaration
  • .m for implementation (instead of .c)
Obj-C in 10 minutes
Obj-C in 10 minutes
• Functions / Methods have return types and
  typed arguments
Obj-C in 10 minutes
• Functions / Methods have return types and
  typed arguments
  int sumOfItems(int i, int j)
  {
     return i + j;
  }
Obj-C in 10 minutes
• Functions / Methods have return types and
  typed arguments
  int sumOfItems(int i, int j)
  {
     return i + j;
  }


• Other types
Obj-C in 10 minutes
• Functions / Methods have return types and
  typed arguments
  int sumOfItems(int i, int j)
  {
     return i + j;
  }


• Other types
 • void, NULL
Obj-C in 10 minutes
• Functions / Methods have return types and
  typed arguments
  int sumOfItems(int i, int j)
  {
     return i + j;
  }


• Other types
 • void, NULL
 • pointers to types (int *, void *)
Obj-C in 10 minutes
Obj-C in 10 minutes
• Objective-C Additions:
Obj-C in 10 minutes
• Objective-C Additions:
 • BOOL - YES / NO
Obj-C in 10 minutes
• Objective-C Additions:
 • BOOL - YES / NO
  BOOL isSet = YES;
Obj-C in 10 minutes
• Objective-C Additions:
 • BOOL - YES / NO
  BOOL isSet = YES;



 • id - strictly a pointer to an object
Obj-C in 10 minutes
• Objective-C Additions:
 • BOOL - YES / NO
  BOOL isSet = YES;



 • id - strictly a pointer to an object
 • nil - a zero’d out pointer
Obj-C in 10 minutes
• Objective-C Additions:
 • BOOL - YES / NO
  BOOL isSet = YES;



 • id - strictly a pointer to an object
 • nil - a zero’d out pointer
  • nil != (necessarily) NULL or 0
Obj-C in 10 minutes
Obj-C in 10 minutes
•   Classes
Obj-C in 10 minutes
•   Classes
    •   Exist as a class pair
Obj-C in 10 minutes
•   Classes
    •   Exist as a class pair
        •   Instance variables and instance methods act
            on an instance object
Obj-C in 10 minutes
•   Classes
    •   Exist as a class pair
        •   Instance variables and instance methods act
            on an instance object
        •   Class (static) methods act on the class
            object
Obj-C in 10 minutes
•   Classes
    •   Exist as a class pair
        •   Instance variables and instance methods act
            on an instance object
        •   Class (static) methods act on the class
            object
        •   There is only ever one class object at any
            given time
Obj-C in 10 minutes
•   Classes
    •   Exist as a class pair
        •   Instance variables and instance methods act
            on an instance object
        •   Class (static) methods act on the class
            object
        •   There is only ever one class object at any
            given time
        •   Class variables really don’t exist
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes                                          Include a header
  #import <Foundation/Foundation.h>
                                                          file
  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>
                                               Declare interface
  @interface MyClass : NSObject                    extends
  {                                               NSObject
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;                               Class instance
    NSArray *someItems;                              variables
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }
                                                   A class (static)
  + (NSString *)className;
  - (void)logMe;                                      method

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;
                                                   An instance
                                                    method
  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }
                                                   A declared
  + (NSString *)className;                          property
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;
                                                      Close the
  @end
                                                   interface block
Obj-C in 10 minutes
• Classes
  #import <Foundation/Foundation.h>

  @interface MyClass : NSObject
  {
    id aChildObject;
    NSArray *someItems;
  }

  + (NSString *)className;
  - (void)logMe;

  @property (nonatomic, retain) id aChildObject;

  @end
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes                                      Include a header
  #import "MyClass.h"
                                                      file
  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"
                                                    Begin
  @implementation MyClass                      implementation
  @synthesize aChildObject;                         block
  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
                                               Auto-generate
  @synthesize aChildObject;
                                                 property
  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init                                     Initializer
  {                                            (constructor)
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
                                               Call to super
     self = [super init];
     if (self)                                     class
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
     self = [super init];                      “new” an array
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Classes
  #import "MyClass.h"

  @implementation MyClass
  @synthesize aChildObject;

  - (id)init
  {
     self = [super init];
     if (self)
     {
         someItems = [[NSArray alloc] init];
     }

      return self;
  }
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
  {
     NSLog(@"MyClass");
  }

  + (NSString *)className
  {
    return NSStringFromClass([self class]);
  }

  @end
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {                                           Destructor
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
  {
     NSLog(@"MyClass");
  }

  + (NSString *)className
  {
    return NSStringFromClass([self class]);
  }

  @end
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
                                              Instance method
  {                                            implementation
     NSLog(@"MyClass");
  }

  + (NSString *)className
  {
    return NSStringFromClass([self class]);
  }

  @end
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
  {
     NSLog(@"MyClass");                        Class method
  }                                           implementation
  + (NSString *)className
  {
    return NSStringFromClass([self class]);
  }

  @end
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
  {
     NSLog(@"MyClass");
  }

  + (NSString *)className
  {
    return NSStringFromClass([self class]);         End
  }                                           implementation
  @end                                             block
Obj-C in 10 minutes
• Continued . . .
  - (void)dealloc
  {
     [aChildObject release];
     [someItems release];
     [super dealloc];
  }

  - (void)logMe
  {
     NSLog(@"MyClass");
  }

  + (NSString *)className
  {
    return NSStringFromClass([self class]);
  }

  @end
Obj-C in 10 minutes
Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
•@
 • Objective-C keywords
 • Initializer for string constants
Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
•@
 • Objective-C keywords
 • Initializer for string constants
• ‘[]’
 • “Send a message to an object”
 • Like calling a method, but more dynamic
Obj-C in 10 minutes
Obj-C in 10 minutes
• Method Calls (messages)
Obj-C in 10 minutes
• Method Calls (messages)
• Names are intermixed with arguments:
Obj-C in 10 minutes
• Method Calls (messages)
• Names are intermixed with arguments:
 • method definition
  - (void)setItems:(NSArray *)items childObject:(id)obj;
Obj-C in 10 minutes
• Method Calls (messages)
• Names are intermixed with arguments:
 • method definition
  - (void)setItems:(NSArray *)items childObject:(id)obj;



 • method call
  [self setItems:[NSArray array] childObject:object];
Obj-C in 10 minutes


- (void)setItems:(NSArray *)items childObject:(id)obj;
Obj-C in 10 minutes
 Return
  Type

- (void)setItems:(NSArray *)items childObject:(id)obj;
Obj-C in 10 minutes
 Return
  Type

- (void)setItems:(NSArray *)items childObject:(id)obj;




                       Method Name
Obj-C in 10 minutes
 Return
  Type                           Arguments and Types


- (void)setItems:(NSArray *)items childObject:(id)obj;




                       Method Name
Obj-C in 10 minutes


[self setItems:[NSArray array] childObject:object];
Obj-C in 10 minutes

Receiver

 [self setItems:[NSArray array] childObject:object];
Obj-C in 10 minutes

Receiver

 [self setItems:[NSArray array] childObject:object];




                     Method Name
Obj-C in 10 minutes

Receiver                            Arguments


 [self setItems:[NSArray array] childObject:object];




                     Method Name
Obj-C in 10 minutes
Obj-C in 10 minutes
• Protocols
Obj-C in 10 minutes
• Protocols
 • Analogous to interfaces
  @protocol MyProtocol <NSObject>

  - (void)protocolMethod;
  @property (nonatomic, retain) NSObject *anObject;

  @end
Obj-C in 10 minutes
• Protocols
 • Analogous to interfaces
  @protocol MyProtocol <NSObject>

  - (void)protocolMethod;
  @property (nonatomic, retain) NSObject *anObject;

  @end


 • Adopting a protocol
  @interface MyClass : NSObject <MyProtocol>
Obj-C in 10 minutes
• Categories - Something completely
  different
• Add functionality to an existing class
  @interface NSString (firstChar)
  - (unichar)firstChar;
  @end

  @implementation NSString (reverse)

  - (unichar)firstChar
  {
     return [self characterAtIndex:0];
  }

  @end
Xcode Tour
• Located in /Developer/Applications
Code Editor
Navigator
Utilities
Debug Area
Run Controls
Status Window (???)
Window Configuration
Run Controls    Status Window (???)   Window Configuration




Navigator          Code Editor                  Utilities




                    Debug Area
Hello World
Model-View-Controller
Model-View-Controller



Model
Model-View-Controller



Model             View
Model-View-Controller



Model   Controller   View
Model
        •   Defines the data to be displayed in
            a view.

            •   Model objects

            •   Database


Model
            •   Web
Controller
               •   Negotiates communication
                   between the model and the view.

                   •   Controls presentation logic

                   •   Updates the model


Controller
                   •   Reflects those updates on the
                       view
View


       •   Contains controls and UI Widgets

           •   Informs the controller of
               updates.
View
Hello World
Model       Controller                  View
          (Hello_WorldViewController)   (.xib)


                                        Label

                view
Hello World
Model       Controller                  View
          (Hello_WorldViewController)   (.xib)


                                        Label

                view
Hello World
Model       Controller                  View
          (Hello_WorldViewController)   (.xib)


                                        Label

                view
Hello You
Hello You
• Basic string handling
• Button control
• TextField control
• Outlets and Actions
• Basic MVC
Hello You
 Model        Controller                  View
              (HelloYouViewController)    (.xib)



NSString:
 name              view
                   textField             textField

                   label                   label

               buttonTap:                 button
Locations
Locations
• CoreLocation
• UITableview
• Delegate Pattern
HTML Photo
HTML App
• Shows interaction between webview
  content and the native development kit.
• Modal View Controllers
• UIImagePickerController
The HTML

<html>
  <head>
    <meta name = "viewport" content = "width = device-width">
  </head>
  <body>
    <h1>Tap for photo</h1>
    <input type="button"
        value="Get Photo"
        onClick="window.location='http://getphoto'"/>
    <img width="320" height="200" id="image"/>
  </body>
</html>
The JavaScript


var image=document.getElementById('image');
image.src = '%@'



    • %@ will be replaced by the image url
Loading the webview

NSError *error;
NSString *filename = [[NSBundle mainBundle]
               pathForResource:@"webview" ofType:@"html"];

NSString *html = [NSString stringWithContentsOfFile:filename
                            encoding:NSUTF8StringEncoding
                              error:&error];
[webview loadHTMLString:html baseURL:nil];
Intercepting the URL
- (BOOL)webView:(UIWebView *)webView
  shouldStartLoadWithRequest:(NSURLRequest *)request
  navigationType:(UIWebViewNavigationType)navigationType
{

    if ([[[request URL] absoluteString] isEqualToString:@"http://getphoto/"])
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.modalPresentationStyle = UIModalTransitionStyleCoverVertical;
        picker.delegate = self;
        [self presentModalViewController:picker animated:YES];
        return NO;

    }
    return YES;
}
iOS Development

• Web:
    pzearfoss@gmail.com
    http://zearfoss.wordpress.com
    @pzearfoss
    http://www.github.com/pzearfoss

Más contenido relacionado

La actualidad más candente

Down the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandDown the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandCharles Nutter
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLou Loizides
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming IntroLou Loizides
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015Charles Nutter
 
Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Charles Nutter
 
Invoke dynamic your api to hotspot
Invoke dynamic your api to hotspotInvoke dynamic your api to hotspot
Invoke dynamic your api to hotspotBoundary
 
Introduction to Kotlin Language and its application to Android platform
Introduction to Kotlin Language and its application to Android platformIntroduction to Kotlin Language and its application to Android platform
Introduction to Kotlin Language and its application to Android platformEastBanc Tachnologies
 
Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Charles Nutter
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotationsmametter
 
Ruby3x3: How are we going to measure 3x
Ruby3x3: How are we going to measure 3xRuby3x3: How are we going to measure 3x
Ruby3x3: How are we going to measure 3xMatthew Gaudet
 
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckOrtus Solutions, Corp
 
Enterprise javascriptsession3
Enterprise javascriptsession3Enterprise javascriptsession3
Enterprise javascriptsession3Troy Miles
 

La actualidad más candente (17)

Down the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM WonderlandDown the Rabbit Hole: An Adventure in JVM Wonderland
Down the Rabbit Hole: An Adventure in JVM Wonderland
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming Introduction
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming Intro
 
JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015JRuby and Invokedynamic - Japan JUG 2015
JRuby and Invokedynamic - Japan JUG 2015
 
Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013Beyond JVM - YOW Melbourne 2013
Beyond JVM - YOW Melbourne 2013
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript Patterns
 
Invoke dynamic your api to hotspot
Invoke dynamic your api to hotspotInvoke dynamic your api to hotspot
Invoke dynamic your api to hotspot
 
Introduction to Kotlin Language and its application to Android platform
Introduction to Kotlin Language and its application to Android platformIntroduction to Kotlin Language and its application to Android platform
Introduction to Kotlin Language and its application to Android platform
 
Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013Beyond JVM - YOW! Brisbane 2013
Beyond JVM - YOW! Brisbane 2013
 
groovy & grails - lecture 1
groovy & grails - lecture 1groovy & grails - lecture 1
groovy & grails - lecture 1
 
Exploring Kotlin
Exploring KotlinExploring Kotlin
Exploring Kotlin
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
Ruby3x3: How are we going to measure 3x
Ruby3x3: How are we going to measure 3xRuby3x3: How are we going to measure 3x
Ruby3x3: How are we going to measure 3x
 
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan ErckITB2019 Real World Scenarios for Modern CFML - Nolan Erck
ITB2019 Real World Scenarios for Modern CFML - Nolan Erck
 
Chapter08
Chapter08Chapter08
Chapter08
 
Enterprise javascriptsession3
Enterprise javascriptsession3Enterprise javascriptsession3
Enterprise javascriptsession3
 
Testing gone-right
Testing gone-rightTesting gone-right
Testing gone-right
 

Destacado

Easy dna paternity testing
Easy dna paternity testingEasy dna paternity testing
Easy dna paternity testingJack Smith
 
Unit 6 Fourth Grade 2012 2013
Unit 6 Fourth Grade 2012 2013Unit 6 Fourth Grade 2012 2013
Unit 6 Fourth Grade 2012 2013Isaac_Schools_5
 
What Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersWhat Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersBen Gaddis
 

Destacado (6)

Day 2
Day 2Day 2
Day 2
 
iOS 5
iOS 5iOS 5
iOS 5
 
Easy dna paternity testing
Easy dna paternity testingEasy dna paternity testing
Easy dna paternity testing
 
Unit 6 Fourth Grade 2012 2013
Unit 6 Fourth Grade 2012 2013Unit 6 Fourth Grade 2012 2013
Unit 6 Fourth Grade 2012 2013
 
What Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersWhat Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for Marketers
 
Apple iOS
Apple iOSApple iOS
Apple iOS
 

Similar a Frederick web meetup slides

Jest: Frontend Testing richtig gemacht @WebworkerNRW
Jest: Frontend Testing richtig gemacht @WebworkerNRWJest: Frontend Testing richtig gemacht @WebworkerNRW
Jest: Frontend Testing richtig gemacht @WebworkerNRWHolger Grosse-Plankermann
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin PresentationAndrzej Sitek
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!Ortus Solutions, Corp
 
COMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliCOMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliMark Billinghurst
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationObject Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationChihyang Li
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bagJacob Green
 
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CНикита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CDataArt
 
Be armed to the teeth to maintain a high quality iOS code
Be armed to the teeth to maintain a high quality iOS codeBe armed to the teeth to maintain a high quality iOS code
Be armed to the teeth to maintain a high quality iOS codeAnastasia Kazakova
 
Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone DevelopmentThoughtWorks
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkAndreas Korth
 
Practical (J)Unit Testing (2009)
Practical (J)Unit Testing (2009)Practical (J)Unit Testing (2009)
Practical (J)Unit Testing (2009)Peter Kofler
 
Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deploymentheyrocker
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptTroy Miles
 
20120524 english lt2_pythontoolsfortesting
20120524 english lt2_pythontoolsfortesting20120524 english lt2_pythontoolsfortesting
20120524 english lt2_pythontoolsfortestingKazuhiro Oinuma
 
Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?devObjective
 
CBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxCBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxOrtus Solutions, Corp
 
Irving iOS Jumpstart Meetup - Objective-C Session 1a
Irving iOS Jumpstart Meetup - Objective-C Session 1aIrving iOS Jumpstart Meetup - Objective-C Session 1a
Irving iOS Jumpstart Meetup - Objective-C Session 1airving-ios-jumpstart
 

Similar a Frederick web meetup slides (20)

Introduction to c ++ part -1
Introduction to c ++   part -1Introduction to c ++   part -1
Introduction to c ++ part -1
 
Jest: Frontend Testing richtig gemacht @WebworkerNRW
Jest: Frontend Testing richtig gemacht @WebworkerNRWJest: Frontend Testing richtig gemacht @WebworkerNRW
Jest: Frontend Testing richtig gemacht @WebworkerNRW
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin Presentation
 
CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!CBDW2014 - MockBox, get ready to mock your socks off!
CBDW2014 - MockBox, get ready to mock your socks off!
 
COMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliCOMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and Soli
 
Object Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - EncapsulationObject Oriented Programming in Swift Ch0 - Encapsulation
Object Oriented Programming in Swift Ch0 - Encapsulation
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bag
 
Никита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-CНикита Корчагин - Programming Apple iOS with Objective-C
Никита Корчагин - Programming Apple iOS with Objective-C
 
Be armed to the teeth to maintain a high quality iOS code
Be armed to the teeth to maintain a high quality iOS codeBe armed to the teeth to maintain a high quality iOS code
Be armed to the teeth to maintain a high quality iOS code
 
Bootstrapping iPhone Development
Bootstrapping iPhone DevelopmentBootstrapping iPhone Development
Bootstrapping iPhone Development
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
 
Practical (J)Unit Testing (2009)
Practical (J)Unit Testing (2009)Practical (J)Unit Testing (2009)
Practical (J)Unit Testing (2009)
 
Design Without Types
Design Without TypesDesign Without Types
Design Without Types
 
Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deployment
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScript
 
20120524 english lt2_pythontoolsfortesting
20120524 english lt2_pythontoolsfortesting20120524 english lt2_pythontoolsfortesting
20120524 english lt2_pythontoolsfortesting
 
Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
CBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxCBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBox
 
Irving iOS Jumpstart Meetup - Objective-C Session 1a
Irving iOS Jumpstart Meetup - Objective-C Session 1aIrving iOS Jumpstart Meetup - Objective-C Session 1a
Irving iOS Jumpstart Meetup - Objective-C Session 1a
 

Último

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Último (20)

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Frederick web meetup slides

  • 2. iOS Development • About Me: • Pat Zearfoss • Mindgrub Technologies, LLC • BS Computer Science - UMBC 2008 • Working with mobile and iOS for 3 years.
  • 3. iOS Development • Web: pzearfoss@gmail.com http://zearfoss.wordpress.com @pzearfoss http://www.github.com/pzearfoss
  • 6. Development Options HTML 5 Cross Platform
  • 7. Development Options HTML 5 Cross Platform Native
  • 9. HTML 5 • Use the technologies you already know.
  • 10. HTML 5 • Use the technologies you already know. • Can be loaded into an app webview and distributed on the app store.
  • 11. HTML 5 • Use the technologies you already know. • Can be loaded into an app webview and distributed on the app store. • Limited use of device hardware.
  • 12. HTML 5 • Use the technologies you already know. • Can be loaded into an app webview and distributed on the app store. • Limited use of device hardware. • Cross Platform
  • 13. HTML 5 • Use the technologies you already know. • Can be loaded into an app webview and distributed on the app store. • Limited use of device hardware. • Cross Platform • Except for all the cross browser problems you already know and love.
  • 15. Cross Platform Frameworks • Titanium, PhoneGap, Others
  • 16. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know.
  • 17. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know. • Titanium generates native code.
  • 18. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know. • Titanium generates native code. • PhoneGap uses web code in a webview.
  • 19. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know. • Titanium generates native code. • PhoneGap uses web code in a webview. • Better use of device hardware.
  • 20. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know. • Titanium generates native code. • PhoneGap uses web code in a webview. • Better use of device hardware. • “Cross Platform”
  • 21. Cross Platform Frameworks • Titanium, PhoneGap, Others • Use the technologies you already know. • Titanium generates native code. • PhoneGap uses web code in a webview. • Better use of device hardware. • “Cross Platform” • Your mileage may vary.
  • 23. Native • Offers the most control over your product.
  • 24. Native • Offers the most control over your product. • Access to all device frameworks.
  • 25. Native • Offers the most control over your product. • Access to all device frameworks. • Requires Objective-C
  • 26. Native • Offers the most control over your product. • Access to all device frameworks. • Requires Objective-C • Only runs on iOS (obviously)
  • 27. Native • Offers the most control over your product. • Access to all device frameworks. • Requires Objective-C • Only runs on iOS (obviously) • Will generally run with the absolute best performance.
  • 28. Xcode • Download from App Store $4.99 Download
  • 29. Xcode • Download from App Store $4.99 Download
  • 30. Xcode • Download from App Store $4.99 Download 4.1 is now free
  • 32. Getting Started • Things you should know
  • 33. Getting Started • Things you should know • Classical OO
  • 34. Getting Started • Things you should know • Classical OO • Classes
  • 35. Getting Started • Things you should know • Classical OO • Classes • Inheritance
  • 36. Getting Started • Things you should know • Classical OO • Classes • Inheritance • Polymorphism
  • 39. Getting Started • Recommended but not required • Some knowledge of C
  • 40. Getting Started • Recommended but not required • Some knowledge of C • malloc() . . . free() ?
  • 41. Getting Started • Recommended but not required • Some knowledge of C • malloc() . . . free() ? • Some knowledge of design patterns:
  • 42. Getting Started • Recommended but not required • Some knowledge of C • malloc() . . . free() ? • Some knowledge of design patterns: • MVC, Singleton, Delegation
  • 43. Objective-C in 10 minutes
  • 45. About Objective-C • Object Oriented superset over C
  • 46. About Objective-C • Object Oriented superset over C Standard C
  • 47. About Objective-C • Object Oriented superset over C Standard C Objective-C
  • 48. About Objective-C • Object Oriented superset over C Standard C Objective-C • Anything that works in C will work in Objective-C
  • 49. Obj-C in 10 minutes
  • 50. Obj-C in 10 minutes • All the things you know from C
  • 51. Obj-C in 10 minutes • All the things you know from C • Variables are typed:
  • 52. Obj-C in 10 minutes • All the things you know from C • Variables are typed: • int, float, double, char
  • 53. Obj-C in 10 minutes • All the things you know from C • Variables are typed: • int, float, double, char int foo = 5;
  • 54. Obj-C in 10 minutes • All the things you know from C • Variables are typed: • int, float, double, char int foo = 5; • Separate compilation
  • 55. Obj-C in 10 minutes • All the things you know from C • Variables are typed: • int, float, double, char int foo = 5; • Separate compilation • .h for interface declaration
  • 56. Obj-C in 10 minutes • All the things you know from C • Variables are typed: • int, float, double, char int foo = 5; • Separate compilation • .h for interface declaration • .m for implementation (instead of .c)
  • 57. Obj-C in 10 minutes
  • 58. Obj-C in 10 minutes • Functions / Methods have return types and typed arguments
  • 59. Obj-C in 10 minutes • Functions / Methods have return types and typed arguments int sumOfItems(int i, int j) { return i + j; }
  • 60. Obj-C in 10 minutes • Functions / Methods have return types and typed arguments int sumOfItems(int i, int j) { return i + j; } • Other types
  • 61. Obj-C in 10 minutes • Functions / Methods have return types and typed arguments int sumOfItems(int i, int j) { return i + j; } • Other types • void, NULL
  • 62. Obj-C in 10 minutes • Functions / Methods have return types and typed arguments int sumOfItems(int i, int j) { return i + j; } • Other types • void, NULL • pointers to types (int *, void *)
  • 63. Obj-C in 10 minutes
  • 64. Obj-C in 10 minutes • Objective-C Additions:
  • 65. Obj-C in 10 minutes • Objective-C Additions: • BOOL - YES / NO
  • 66. Obj-C in 10 minutes • Objective-C Additions: • BOOL - YES / NO BOOL isSet = YES;
  • 67. Obj-C in 10 minutes • Objective-C Additions: • BOOL - YES / NO BOOL isSet = YES; • id - strictly a pointer to an object
  • 68. Obj-C in 10 minutes • Objective-C Additions: • BOOL - YES / NO BOOL isSet = YES; • id - strictly a pointer to an object • nil - a zero’d out pointer
  • 69. Obj-C in 10 minutes • Objective-C Additions: • BOOL - YES / NO BOOL isSet = YES; • id - strictly a pointer to an object • nil - a zero’d out pointer • nil != (necessarily) NULL or 0
  • 70. Obj-C in 10 minutes
  • 71. Obj-C in 10 minutes • Classes
  • 72. Obj-C in 10 minutes • Classes • Exist as a class pair
  • 73. Obj-C in 10 minutes • Classes • Exist as a class pair • Instance variables and instance methods act on an instance object
  • 74. Obj-C in 10 minutes • Classes • Exist as a class pair • Instance variables and instance methods act on an instance object • Class (static) methods act on the class object
  • 75. Obj-C in 10 minutes • Classes • Exist as a class pair • Instance variables and instance methods act on an instance object • Class (static) methods act on the class object • There is only ever one class object at any given time
  • 76. Obj-C in 10 minutes • Classes • Exist as a class pair • Instance variables and instance methods act on an instance object • Class (static) methods act on the class object • There is only ever one class object at any given time • Class variables really don’t exist
  • 77. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 78. Obj-C in 10 minutes • Classes Include a header #import <Foundation/Foundation.h> file @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 79. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> Declare interface @interface MyClass : NSObject extends { NSObject id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 80. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; Class instance NSArray *someItems; variables } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 81. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } A class (static) + (NSString *)className; - (void)logMe; method @property (nonatomic, retain) id aChildObject; @end
  • 82. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; An instance method @property (nonatomic, retain) id aChildObject; @end
  • 83. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } A declared + (NSString *)className; property - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 84. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; Close the @end interface block
  • 85. Obj-C in 10 minutes • Classes #import <Foundation/Foundation.h> @interface MyClass : NSObject { id aChildObject; NSArray *someItems; } + (NSString *)className; - (void)logMe; @property (nonatomic, retain) id aChildObject; @end
  • 86. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 87. Obj-C in 10 minutes • Classes Include a header #import "MyClass.h" file @implementation MyClass @synthesize aChildObject; - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 88. Obj-C in 10 minutes • Classes #import "MyClass.h" Begin @implementation MyClass implementation @synthesize aChildObject; block - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 89. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass Auto-generate @synthesize aChildObject; property - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 90. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init Initializer { (constructor) self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 91. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 92. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init { Call to super self = [super init]; if (self) class { someItems = [[NSArray alloc] init]; } return self; }
  • 93. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init { self = [super init]; “new” an array if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 94. Obj-C in 10 minutes • Classes #import "MyClass.h" @implementation MyClass @synthesize aChildObject; - (id)init { self = [super init]; if (self) { someItems = [[NSArray alloc] init]; } return self; }
  • 95. Obj-C in 10 minutes • Continued . . . - (void)dealloc { [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe { NSLog(@"MyClass"); } + (NSString *)className { return NSStringFromClass([self class]); } @end
  • 96. Obj-C in 10 minutes • Continued . . . - (void)dealloc { Destructor [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe { NSLog(@"MyClass"); } + (NSString *)className { return NSStringFromClass([self class]); } @end
  • 97. Obj-C in 10 minutes • Continued . . . - (void)dealloc { [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe Instance method { implementation NSLog(@"MyClass"); } + (NSString *)className { return NSStringFromClass([self class]); } @end
  • 98. Obj-C in 10 minutes • Continued . . . - (void)dealloc { [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe { NSLog(@"MyClass"); Class method } implementation + (NSString *)className { return NSStringFromClass([self class]); } @end
  • 99. Obj-C in 10 minutes • Continued . . . - (void)dealloc { [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe { NSLog(@"MyClass"); } + (NSString *)className { return NSStringFromClass([self class]); End } implementation @end block
  • 100. Obj-C in 10 minutes • Continued . . . - (void)dealloc { [aChildObject release]; [someItems release]; [super dealloc]; } - (void)logMe { NSLog(@"MyClass"); } + (NSString *)className { return NSStringFromClass([self class]); } @end
  • 101. Obj-C in 10 minutes
  • 102. Obj-C in 10 minutes • What’s with all the ‘@’ and ‘[ ]’?
  • 103. Obj-C in 10 minutes • What’s with all the ‘@’ and ‘[ ]’? •@ • Objective-C keywords • Initializer for string constants
  • 104. Obj-C in 10 minutes • What’s with all the ‘@’ and ‘[ ]’? •@ • Objective-C keywords • Initializer for string constants • ‘[]’ • “Send a message to an object” • Like calling a method, but more dynamic
  • 105. Obj-C in 10 minutes
  • 106. Obj-C in 10 minutes • Method Calls (messages)
  • 107. Obj-C in 10 minutes • Method Calls (messages) • Names are intermixed with arguments:
  • 108. Obj-C in 10 minutes • Method Calls (messages) • Names are intermixed with arguments: • method definition - (void)setItems:(NSArray *)items childObject:(id)obj;
  • 109. Obj-C in 10 minutes • Method Calls (messages) • Names are intermixed with arguments: • method definition - (void)setItems:(NSArray *)items childObject:(id)obj; • method call [self setItems:[NSArray array] childObject:object];
  • 110. Obj-C in 10 minutes - (void)setItems:(NSArray *)items childObject:(id)obj;
  • 111. Obj-C in 10 minutes Return Type - (void)setItems:(NSArray *)items childObject:(id)obj;
  • 112. Obj-C in 10 minutes Return Type - (void)setItems:(NSArray *)items childObject:(id)obj; Method Name
  • 113. Obj-C in 10 minutes Return Type Arguments and Types - (void)setItems:(NSArray *)items childObject:(id)obj; Method Name
  • 114. Obj-C in 10 minutes [self setItems:[NSArray array] childObject:object];
  • 115. Obj-C in 10 minutes Receiver [self setItems:[NSArray array] childObject:object];
  • 116. Obj-C in 10 minutes Receiver [self setItems:[NSArray array] childObject:object]; Method Name
  • 117. Obj-C in 10 minutes Receiver Arguments [self setItems:[NSArray array] childObject:object]; Method Name
  • 118. Obj-C in 10 minutes
  • 119. Obj-C in 10 minutes • Protocols
  • 120. Obj-C in 10 minutes • Protocols • Analogous to interfaces @protocol MyProtocol <NSObject> - (void)protocolMethod; @property (nonatomic, retain) NSObject *anObject; @end
  • 121. Obj-C in 10 minutes • Protocols • Analogous to interfaces @protocol MyProtocol <NSObject> - (void)protocolMethod; @property (nonatomic, retain) NSObject *anObject; @end • Adopting a protocol @interface MyClass : NSObject <MyProtocol>
  • 122. Obj-C in 10 minutes • Categories - Something completely different • Add functionality to an existing class @interface NSString (firstChar) - (unichar)firstChar; @end @implementation NSString (reverse) - (unichar)firstChar { return [self characterAtIndex:0]; } @end
  • 123. Xcode Tour • Located in /Developer/Applications
  • 124.
  • 132.
  • 133. Run Controls Status Window (???) Window Configuration Navigator Code Editor Utilities Debug Area
  • 138. Model-View-Controller Model Controller View
  • 139. Model • Defines the data to be displayed in a view. • Model objects • Database Model • Web
  • 140. Controller • Negotiates communication between the model and the view. • Controls presentation logic • Updates the model Controller • Reflects those updates on the view
  • 141. View • Contains controls and UI Widgets • Informs the controller of updates. View
  • 142. Hello World Model Controller View (Hello_WorldViewController) (.xib) Label view
  • 143. Hello World Model Controller View (Hello_WorldViewController) (.xib) Label view
  • 144. Hello World Model Controller View (Hello_WorldViewController) (.xib) Label view
  • 146. Hello You • Basic string handling • Button control • TextField control • Outlets and Actions • Basic MVC
  • 147. Hello You Model Controller View (HelloYouViewController) (.xib) NSString: name view textField textField label label buttonTap: button
  • 151. HTML App • Shows interaction between webview content and the native development kit. • Modal View Controllers • UIImagePickerController
  • 152. The HTML <html> <head> <meta name = "viewport" content = "width = device-width"> </head> <body> <h1>Tap for photo</h1> <input type="button" value="Get Photo" onClick="window.location='http://getphoto'"/> <img width="320" height="200" id="image"/> </body> </html>
  • 153. The JavaScript var image=document.getElementById('image'); image.src = '%@' • %@ will be replaced by the image url
  • 154. Loading the webview NSError *error; NSString *filename = [[NSBundle mainBundle] pathForResource:@"webview" ofType:@"html"]; NSString *html = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error]; [webview loadHTMLString:html baseURL:nil];
  • 155. Intercepting the URL - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([[[request URL] absoluteString] isEqualToString:@"http://getphoto/"]) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.modalPresentationStyle = UIModalTransitionStyleCoverVertical; picker.delegate = self; [self presentModalViewController:picker animated:YES]; return NO; } return YES; }
  • 156. iOS Development • Web: pzearfoss@gmail.com http://zearfoss.wordpress.com @pzearfoss http://www.github.com/pzearfoss

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n
  172. \n