SlideShare ist ein Scribd-Unternehmen logo
1 von 156
Downloaden Sie, um offline zu lesen
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
Frederick web meetup slides
Code Editor
Navigator
Utilities
Debug Area
Run Controls
Status Window (???)
Window Configuration
Frederick web meetup slides
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?SANGHEE SHIN
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 

Kürzlich hochgeladen (20)

KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 

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

Hinweis der Redaktion

  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