beginningi os part1-bobmccune

Post on 10-May-2015

770 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Mobile March 2012

TRANSCRIPT

http://bobmccune.com

Beginning iOS Development

Monday, March 19, 12

Beginning iOS DevelopmentAgenda

• Understanding the Tools

• Objective-C Crash Course

• Using Cocoa Touch

Monday, March 19, 12

iOS SDK Tools

Monday, March 19, 12

Xcode

Monday, March 19, 12

Xcode•Apple’s IDE for creating Mac and iOS apps

•Provides visual front end to LLVM and LLDB

•Hub of development process:

Editing

Building

Refactoring

Debugging

API Doc Integration

UI Design

Testing

Model Design

Deployment

Project Configuration

Monday, March 19, 12

iOS Simulator

Monday, March 19, 12

•Device simulator, runs on your desktop

•Both iPhone and iPad (retina, non-retina)

•Faster code, build, test cycle

•Test behaviors: rotation, shake, multi-touch

•Easier testing of exceptional conditions

• iOS Simulator != iOS Device:

•No memory or CPU limits

•Not all APIs and capabilities available

iOS Simulator

Monday, March 19, 12

Instruments

Monday, March 19, 12

Instruments

• Dynamic tracing and profiling tool• Uses digital audio workstation-like interface• Large library of standard instruments

• Core Animation, Leaks, Automation, etc.

• The ultra geeky can build custom instruments

Monday, March 19, 12

Hands-On Tour

Monday, March 19, 12

Objective-C

Monday, March 19, 12

Objective-C EssentialsAgenda

• Overview of Objective-C

• Understanding Classes and Objects

• Methods, Messages, and Properties

• Protocols

Monday, March 19, 12

The old, new hotnessObjective-C

• Strict superset of ANSI C• Object-oriented extensions

• Additional syntax and types

• Dynamic, Object-Oriented Language:• Dynamic Typing

• Dynamic Binding

• Dynamic Loading

Monday, March 19, 12

Creating Classes

Monday, March 19, 12

The BlueprintCreating Classes

• Objective-C classes are separated into an interface and an implementation.• Usually defined in separate .h and .m files

•Defines the programming interface

•Can define object instance variables

•Defines the actual implementation code

•Implement one or more initializers to properly initialize an object instance

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Interface@interface BankAccount : NSObject {}

@end

float accountBalance;NSString *accountNumber;

- (float)withDraw:(float)amount;- (void)deposit:(float)amount;

Monday, March 19, 12

Defining the Implementation#import "BankAccount.h"

@implementation BankAccount

- (id)init { self = [super init]; return self;}

- (float)withdraw:(float)amount { // calculate valid withdrawal return amount;}

- (void)deposit:(float)amount { // record transaction}@end

Monday, March 19, 12

Defining the Implementation#import "BankAccount.h"

@implementation BankAccount

- (id)init { self = [super init]; return self;}

- (float)withdraw:(float)amount { // calculate valid withdrawal return amount;}

- (void)deposit:(float)amount { // record transaction}@end

Monday, March 19, 12

Defining the Implementation#import "BankAccount.h"

@implementation BankAccount

- (id)init { self = [super init]; return self;}

- (float)withdraw:(float)amount { // calculate valid withdrawal return amount;}

- (void)deposit:(float)amount { // record transaction}@end

Monday, March 19, 12

Defining the Implementation#import "BankAccount.h"

@implementation BankAccount

- (id)init { self = [super init]; return self;}

- (float)withdraw:(float)amount { // calculate valid withdrawal return amount;}

- (void)deposit:(float)amount { // record transaction}@end

Monday, March 19, 12

Understanding the SyntaxDefining Methods

• Class methods

• Prefixed with a +

• Tied to class, not instance

• Instance Methods• Instance methods prefix with a -

• Modifies state of an object instance

- (NSString *)description;

Monday, March 19, 12

Understanding the SyntaxDefining Methods

• Class methods

• Prefixed with a +

• Tied to class, not instance

• Instance Methods• Instance methods prefix with a -

• Modifies state of an object instance

- (BOOL)respondsToSelector:(SEL)aSelector;

Monday, March 19, 12

Understanding the SyntaxDefining Methods

• Class methods

• Prefixed with a +

• Tied to class, not instance

• Instance Methods• Instance methods prefix with a -

• Modifies state of an object instance

+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

Monday, March 19, 12

Talking to yourself

-(id)init { self = [super init]; if (self) { // do initialization } return self;}

• Methods have implicit reference to owning object called self

• Additionally have access to superclass methods using super

self and super

Monday, March 19, 12

Working with Objects

Monday, March 19, 12

Two-Stage Creation• NSObject defines class method called alloc

• Dynamically allocates memory for object

• Returns new instance of receiving class

BankAccount *account = [BankAccount alloc];

• NSObject defines instance method init

• Implemented by subclasses to initialize instance after memory for it has been allocated

• Subclasses commonly define several initializers

• alloc and init calls should always nested into single line

account = [account init];

BankAccount *account = [[BankAccount alloc] init];

Monday, March 19, 12

Messages

• Methods are invoked by passing messages• Methods are never directly invoked

• Messages dynamically bound to method implementations at runtime

• Simple messages take the form:• [object message];

• Can pass one or more arguments:• [object methodWithArg1:arg1 arg2:arg2];

Communicating with Objects

Monday, March 19, 12

Messaging an ObjectNSMutableDictionary *person =

[NSMutableDictionary dictionary];

[person setObject:children forKey:@"children"];

[person setObject:@"Joe Smith" forKey:@"name"];

NSString *address = @"123 Street";NSString *house = [address substringWithRange:NSMakeRange(0, 3)];[person setObject:house forKey:@"houseNumber"];

NSArray *children = [NSArray arrayWithObjects:@"Jack", @"Susie", nil];

Monday, March 19, 12

Declared Properties

Monday, March 19, 12

Declared Properties

• Most common methods we write are accessors

• Objective-C can automatically generate accessors

• Much less verbose, less error prone

• Highly configurable

• Declared properties are defined in two parts:

• @property definition in the interface

• @synthesize statement in the implementation

Simplifying Accessors

Monday, March 19, 12

Declaring Properties

Attribute Impacts

nonatomic Concurrency

readonly/readwrite Mutability

strong/copy/weak/assign Storage

getter/setter API

@property (attributes) type variable;

Monday, March 19, 12

Declaring Properties

Attribute Impacts

nonatomic Concurrency

readonly/readwrite Mutability

strong/copy/weak/assign Storage

getter/setter API

@property (attributes) type variable;

@property (readonly) BOOL active;

Monday, March 19, 12

Declaring Properties

Attribute Impacts

nonatomic Concurrency

readonly/readwrite Mutability

strong/copy/weak/assign Storage

getter/setter API

@property (attributes) type variable;

@property (nonatomic, readonly) BOOL active;

Monday, March 19, 12

Declaring Properties

Attribute Impacts

nonatomic Concurrency

readonly/readwrite Mutability

strong/copy/weak/assign Storage

getter/setter API

@property (attributes) type variable;

@property (nonatomic, strong) NSDate *activeDate;

Monday, March 19, 12

Declaring Properties

Attribute Impacts

nonatomic Concurrency

readonly/readwrite Mutability

strong/copy/weak/assign Storage

getter/setter API

@property (attributes) type variable;

@property (readonly, getter=isValid) BOOL valid;

Monday, March 19, 12

Defining the InterfaceDeclaring Properties

@interface BankAccount : NSObject

@property (nonatomic, copy) NSString *accountNumber;@property (nonatomic, strong) NSDecimalNumber *balance;@property (readonly, strong) NSDecimalNumber *fees;@property (getter=isCurrent) BOOL accountCurrent;

@end

Monday, March 19, 12

Generating the AccessorsSynthesizing Properties

@implementation BankAccount

@synthesize accountNumber = _accountNumber;@synthesize balance = _balance;@synthesize fees = _fees;@synthesize accountCurrent = _accountCurrent;

@end

Monday, March 19, 12

Accessing Properties• Generated properties are standard methods

• Accessed through normal messaging syntax

[object property];[object setProperty:newValue];

• Objective-C property access via dot notationobject.property;object.property = newValue;

Dot notation is just syntactic sugar. Still uses accessor methods. Doesn't get/set values directly.

Monday, March 19, 12

Protocols

Monday, March 19, 12

Object-Oriented ContractsProtocols

• Abstract methods to be implemented• Methods are not tied to a specific class

• Analogous to C# and Java interfaces

• Useful in defining:• Capturing similarities among classes that aren't

hierarchically related

• Declaring an interface while hiding its particular class

• Delegate callback methods

Monday, March 19, 12

NSCodingDefining a Protocol

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;- (id)initWithCoder:(NSCoder *)aDecoder;

@end

* NSCoding defined in Foundation Framework

Monday, March 19, 12

Conforming to the ContractAdopting a Protocol

@interface User : NSObject <NSCoding>

@property (nonatomic, copy) NSString *username;@property (nonatomic, copy) NSString *password;

@end

Monday, March 19, 12

Conforming to the ContractAdopting a Protocol

@interface User : NSObject <NSCoding>

@property (nonatomic, copy) NSString *username;@property (nonatomic, copy) NSString *password;

@end

Monday, March 19, 12

Conforming to the ContractAdopting a Protocol

@implementation User

-(id)initWithCoder:(NSCoder *)coder { if (self = [super init]) { self.username = [coder decodeObjectForKey:@"username"]; self.password = [coder decodeObjectForKey:@"password"]; } return self;}

-(void)encodeWithCoder:(NSCoder *)coder { [coder encodeObject:self.username forKey:@"username"]; [coder encodeObject:self.username forKey:@"password"];}

@end

Monday, March 19, 12

Time to Code!

Monday, March 19, 12

Using Cocoa Touch

Monday, March 19, 12

Cocoa Touch

• Core framework for non-UI functionality

• Operating System Classes• threading, archiving, filesystem

• Collections• Common collection types: arrays, dictionaries, sets

• Networking support

• XML Processing

Foundation Framework

Monday, March 19, 12

Cocoa Touch

• Framework for building iOS user interfaces

• User Interface Elements

• Tables, buttons, images, etc.

• Views and View Controllers

• Multitouch Event Handling

• High-level Drawing Routines

UIKit Framework

Monday, March 19, 12

Model, View, ControllerUnderstanding MVC

Model View

Controller

Monday, March 19, 12

The “V” in MVC

• Base class for iOS user interface components• Drawing and animation

• Layout and subview management

• Multitouch event handling

• Xcode’s Interface Builder used to build UI• Archived version of UI stored in XIB/NIB file

• Dynamically loaded at runtime by controller

• Can be created programmatically

UIView

Monday, March 19, 12

The “C” in MVC

• The heart of every iOS app

• Provides the “glue code” between the model and view

• Responsible for managing the view hierarchy and lifecycle

• Key view lifecycle methods:

UIViewController

- (void)loadView;- (void)viewDidLoad;- (void)viewDidUnload;

Monday, March 19, 12

Is view nil?

controller.view

View Controller

View loadView viewDidLoad

1) Overridden2) Loaded from NIB3) Return empty UIView

UIViewController: View Loading

Monday, March 19, 12

View Unloading

• didReceiveMemoryWarning• Called by OS when low memory encountered

• If possible, will release controller’s view

• Can override, but must call super

• viewDidUnload invoked if root view released• Override to release anything that can be

recreated in loadView/viewDidLoad

Dealing with low memory conditions

Monday, March 19, 12

Display-related Callbacks

viewWillAppear• Called immediately prior to being presented

viewDidAppear• Called upon view being added to window

viewWillDisappear• Called immediately before view is removed

from window or is covered by another viewviewDidDisappear

• Called after view is removed from window or is covered by another view

Monday, March 19, 12

Wiring the View and View ControllerOutlets and Actions

• Provides metadata to Interface Builder to allow connections between objects

• IBOutlet

• Property reference to XIB/NIB objects

• Null-defined C macro

• IBAction

• Used by Interface Builder to determine available actions

• Void-defined C macro

Monday, March 19, 12

Time to Code!

Monday, March 19, 12

top related