Upload
ben-scheirman
View
371
Download
1
Tags:
Embed Size (px)
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