5. Xcode
• Apple’s IDE for creating Mac and iOS apps
• Provides visual front end to LLVM and LLDB
• Hub of development process:
Editing UI Design
Building Testing
Refactoring Model Design
Debugging Deployment
API Doc Integration Project Configuration
Monday, March 19, 12
7. iOS Simulator
• 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
Monday, March 19, 12
9. 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
15. Creating Classes
The Blueprint
• Objective-C classes are separated into an
interface and an implementation.
• Usually defined in separate .h and .m files
•Defines the •Defines the actual
programming implementation
interface code
•Can define
object instance •Implement one or
variables more initializers to
properly initialize
an object instance
Monday, March 19, 12
26. Defining Methods
Understanding the Syntax
• 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
27. Defining Methods
Understanding the Syntax
• 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
28. Defining Methods
Understanding the Syntax
• 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
29. self and super
Talking to yourself
• Methods have implicit reference to owning
object called self
• Additionally have access to superclass
methods using super
-(id)init {
self = [super init];
if (self) {
// do initialization
}
return self;
}
Monday, March 19, 12
31. 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
account = [account init];
• alloc and init calls should always nested into single line
BankAccount *account = [[BankAccount alloc] init];
Monday, March 19, 12
32. Messages
Communicating with Objects
• 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];
Monday, March 19, 12
35. Declared Properties
Simplifying Accessors
• 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
Monday, March 19, 12
36. Declaring Properties
@property (attributes) type variable;
Attribute Impacts
nonatomic Concurrency
readonly/readwrite Mutability
strong/copy/
Storage
weak/assign
getter/setter API
Monday, March 19, 12
37. Declaring Properties
@property (attributes) type variable;
Attribute Impacts
nonatomic Concurrency
readonly/readwrite Mutability
strong/copy/
Storage
weak/assign
getter/setter API
@property (readonly) BOOL active;
Monday, March 19, 12
38. Declaring Properties
@property (attributes) type variable;
Attribute Impacts
nonatomic Concurrency
readonly/readwrite Mutability
strong/copy/
Storage
weak/assign
getter/setter API
@property (nonatomic, readonly) BOOL active;
Monday, March 19, 12
39. Declaring Properties
@property (attributes) type variable;
Attribute Impacts
nonatomic Concurrency
readonly/readwrite Mutability
strong/copy/
Storage
weak/assign
getter/setter API
@property (nonatomic, strong) NSDate *activeDate;
Monday, March 19, 12
40. Declaring Properties
@property (attributes) type variable;
Attribute Impacts
nonatomic Concurrency
readonly/readwrite Mutability
strong/copy/
Storage
weak/assign
getter/setter API
@property (readonly, getter=isValid) BOOL valid;
Monday, March 19, 12
45. Protocols
Object-Oriented Contracts
• 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
46. Defining a Protocol
NSCoding
* NSCoding defined in Foundation Framework
@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end
Monday, March 19, 12
47. Adopting a Protocol
Conforming to the Contract
@interface User : NSObject <NSCoding>
@property (nonatomic, copy) NSString *username;
@property (nonatomic, copy) NSString *password;
@end
Monday, March 19, 12
48. Adopting a Protocol
Conforming to the Contract
@interface User : NSObject <NSCoding>
@property (nonatomic, copy) NSString *username;
@property (nonatomic, copy) NSString *password;
@end
Monday, March 19, 12
49. Adopting a Protocol
Conforming to the Contract
@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
52. Cocoa Touch
Foundation Framework
• Core framework for non-UI functionality
• Operating System Classes
• threading, archiving, filesystem
• Collections
• Common collection types: arrays, dictionaries, sets
• Networking support
• XML Processing
Monday, March 19, 12
53. Cocoa Touch
UIKit Framework
• Framework for building iOS user interfaces
• User Interface Elements
• Tables, buttons, images, etc.
• Views and View Controllers
• Multitouch Event Handling
• High-level Drawing Routines
Monday, March 19, 12
54. Understanding MVC
Model,View, Controller
Model View
Controller
Monday, March 19, 12
55. UIView
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
Monday, March 19, 12
56. UIViewController
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:
- (void)loadView;
- (void)viewDidLoad;
- (void)viewDidUnload;
Monday, March 19, 12
57. UIViewController: View Loading
controller.view
View Controller
Is view nil?
View loadView viewDidLoad
1) Overridden
2) Loaded from NIB
3) Return empty UIView
Monday, March 19, 12
58. View Unloading
Dealing with low memory conditions
• 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
Monday, March 19, 12
59. 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 view
viewDidDisappear
• Called after view is removed from window or
is covered by another view
Monday, March 19, 12
60. Outlets and Actions
Wiring the View and View Controller
• 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