iPhone for .NET Developers

Preview:

Citation preview

iPhone for .NET DevelopersBen Scheirman

Director of Development - ChaiONE

@subdigital

Tuesday, September 28, 2010

What you need

A Mac

Xcode

iPhone SDK (limited to Simulator)

iPhone Developer Program ($99 /year)

Tuesday, September 28, 2010

Objective-C

Based on C

Object Oriented

Dynamic

A little weird

Powerful

Tuesday, September 28, 2010

Objective-C Primer

Calling methods

Tuesday, September 28, 2010

Objective-C Primer

Calling methods

[someObject someMethod];

Tuesday, September 28, 2010

Objective-C Primer

Calling methods

[someObject someMethod];

[someObject someMethodWithInput:5];

Tuesday, September 28, 2010

Objective-C Primer

Calling methods

[someObject someMethod];

[someObject someMethodWithInput:5];

[dictionary setObject:obj forKey:key];

Tuesday, September 28, 2010

Objective-C Primer

Nesting method calls

Tuesday, September 28, 2010

Objective-C Primer

Nesting method calls

[NSString stringWithFormat: [prefs format]];

Tuesday, September 28, 2010

Objective-C Primer

Instantiating classes

Tuesday, September 28, 2010

Objective-C Primer

Instantiating classes

UIView *view = [[UIView alloc] init];

Tuesday, September 28, 2010

Objective-C Primer

Instantiating classes

UIView *view = [[UIView alloc] init];

NSDate *date = [NSDate date];

Tuesday, September 28, 2010

Objective-C Primer

Defining Classes

Tuesday, September 28, 2010

Objective-C Primer

Defining Classes

//Person.h@interface Person { //instance variables}

//properties & methods

@end

Tuesday, September 28, 2010

Objective-C Primer

Defining Classes

Tuesday, September 28, 2010

Objective-C Primer

Defining Classes

//Person.m#import "Person.h"

@implementation Person

//implement properties & methods

@end

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

-(void)showLoadingText:(NSString *)text animated:(BOOL)animated;

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

-(void)showLoadingText:(NSString *)text animated:(BOOL)animated;

Method name (selector)

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

-(void)showLoadingText:(NSString *)text animated:(BOOL)animated;

Return Type

Method name (selector)

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

-(void)showLoadingText:(NSString *)text animated:(BOOL)animated;

Return Type

Instance method

Method name (selector)

Tuesday, September 28, 2010

Objective-C Primer

Defining Methods

-(void)showLoadingText:(NSString *)text animated:(BOOL)animated;

Return Type

Instance method

Parameters

Method name (selector)

Tuesday, September 28, 2010

Memory Management

No garbage collection on the iPhone

Retain / Release

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Foo *foo = [[Foo alloc] init]; 1

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Foo *foo = [[Foo alloc] init];

[foo retain];

1

2

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Foo *foo = [[Foo alloc] init];

[foo retain];

[foo release];

1

2

1

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Foo *foo = [[Foo alloc] init];

[foo retain];

[foo release];

[foo release];

1

2

1

0

Tuesday, September 28, 2010

Memory Management

Retain / Release Dance

Foo *foo = [[Foo alloc] init];

[foo retain];

[foo release];

[foo release];

1

2

1

0foo is deallocated

Tuesday, September 28, 2010

Getters / Setters

Tuesday, September 28, 2010

Getters / Setters

[foo setBar:@"baz"];

Tuesday, September 28, 2010

Getters / Setters

[foo setBar:@"baz"];

[foo bar]; //returns @"baz"

Tuesday, September 28, 2010

Getters / Setters

[foo setBar:@"baz"];

[foo bar]; //returns @"baz"

foo.bar = @"gruul";

Tuesday, September 28, 2010

Getters / Setters

[foo setBar:@"baz"];

[foo bar]; //returns @"baz"

foo.bar //returns @"gruul"

foo.bar = @"gruul";

Tuesday, September 28, 2010

Implementing setters

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value {

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return;

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) {

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release];

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release]; bar = nil;

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release]; bar = nil; }

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release]; bar = nil; }

if(value != nil)

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release]; bar = nil; }

if(value != nil) bar = [value retain];

Tuesday, September 28, 2010

Implementing setters-(void)setBar:(id)value { if(bar == value) return; if(bar != nil) { [bar release]; bar = nil; }

if(value != nil) bar = [value retain];}

Tuesday, September 28, 2010

No Thanks

Tuesday, September 28, 2010

Properties

Tuesday, September 28, 2010

Properties//Foo.h

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

-(void)dealloc {

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

-(void)dealloc {

[image release];

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

-(void)dealloc {

[image release]; [message release];

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

-(void)dealloc {

[image release]; [message release];

[super dealloc];

Tuesday, September 28, 2010

Properties//Foo.h@property (nonatomic, retain) UIImage *image;@property (nonatomic, copy) NSString *message;

//Foo.m@synthesize image, message;

-(void)dealloc {

[image release]; [message release];

[super dealloc];}

Tuesday, September 28, 2010

Dot Syntax Dogma

Use dot syntax if you like it

Just be aware of what it's hiding

Tuesday, September 28, 2010

Xcode

Your IDE

Code completion

Interactive Debugger

Lacks good refactoring tools

Tuesday, September 28, 2010

Interface Builder

Drag-n-drop UI building

Layouts are defined in XIBs (XML representation). Usually called "Nibs"

"Make connections" with classes defined in Xcode

variables --> UI components

UI events --> methods

Tuesday, September 28, 2010

Instruments

Find Memory Leaks

Analyze Memory Usage

Track down slow code

Tuesday, September 28, 2010

iOS SDK

Your app

UIKit

CoreFoundation

CoreGraphics

Accelerate

AddressBook

AudioToolbox

AVFoundation

CoreAudio

CoreData

CoreLocation

CoreMotion

CoreTelephony

CoreText

CoreVideo

GameKit

iAd

MapKit

CFNetwork StoreKit

Tuesday, September 28, 2010

Model View Controller

Model View

Controller

Tuesday, September 28, 2010

The View Controller

Handles setup logic for a screen

Handles user input

Interacts with the model

Contains 1 or more views

Tuesday, September 28, 2010

The View

Visual representation

Drawing

Laying out subviews (autorotation)

May Handle touch events

Tuesday, September 28, 2010

Lifecycle of an App

main.m

Tuesday, September 28, 2010

Lifecycle of an App

main.m

UIApplication

Tuesday, September 28, 2010

Lifecycle of an App

main.m

UIApplication

Tuesday, September 28, 2010

Lifecycle of an App

main.m MainWindow.xib

UIApplication

Tuesday, September 28, 2010

Lifecycle of an App

main.m MainWindow.xib

UIApplication

Tuesday, September 28, 2010

Lifecycle of an App

YourAppDelegate

main.m MainWindow.xib

UIApplication

Root View ControllerUIWindow

Tuesday, September 28, 2010

Lifecycle of an App

YourAppDelegate

main.m MainWindow.xib

UIApplication

Root View Controller

applicationDidFinishLaunching

UIWindow

Tuesday, September 28, 2010

Time to code!

Tuesday, September 28, 2010