Presented at A Swift Start on 08/29/2014:
A one day iOS community conference discussing
the ups and downs of learning iOS. Beginners and pros invited
An intro to two Objc-C/Cocoa design patterns: Notification Center and Delegates. The talk focuses on learning multiple ways to solve the problem while avoiding the 'chainsaw massacre' of one powerful approach over another.
Biology for Computer Engineers Course Handout.pptx
Intro to Obj-C Design Patterns or Or how I learned to be less bad
1. Intro to Obj-C
Design Patterns
Or how I learned to be less bad
Haris Amin
2. GLIMPSE
A fun way to meet
new people through
Instagram
3. Design Patterns
• Why do we care?
• Let’s explore two design patterns in
Cocoa
1. Notification Center
2. Delegates
4. Notification Center
• NSNotificationCenter class
• Easiest to learn (IMHO) but also easiest to
abuse
• Very flexible
5. Notification Center
• Let’s Grab a NotificationCenter ‘instance’
[NSNotificationCenter defaultCenter]
!
• Then PUBLISH a specific message (2 ways)
1. With content
2. Without Content
6. Publish Message Without Content
• We want to notify that something specific
‘happened’
• Method Signature
- (void)postNotificationName:(NSString
*)notificationName object:(id)notificationSender
7. Publish Message Without Content
- (void)postNotificationName:(NSString
*)notificationName object:(id)notificationSender
• E.G. The Video’s current time just updated
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TimeUpdated" object:self];
8. Publish Message With Content
- (void)postNotificationName:(NSString
*)notificationName object:(id)notificationSender
userInfo:(NSDictionary *)userInfo
• E.G. The Video’s current time just updated
WITH the actual current time
[[NSNotificationCenter defaultCenter]
postNotificationName:@"TimeUpdated" object:self
userInfo:@{@"currentTime": 20}];
9. Subscribing to a Message
- (void)addObserver:(id)notificationObserver
selector:(SEL)notificationSelector name:(NSString
*)notificationName object:(id)notificationSender
• In our VideoPlayer class we will just subscribe
to the NotificationCenter Message
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTimeUpdate:)
name:@"TimeUpdated"
object:nil];
- (void)handleTimeUpdate:(NSNotification *)note{
// note.userInfo is the CONTENT we passed
// ...
}
10. Notification Center…
THE GOOD
• Really flexible
• Don’t have to define any sort of protocol for your
messages
• You can subscribe and publish messages in any
number of places
11. Notification Center…
THE BAD
• TOO flexible?!
• Don’t have to define any sort of protocol for your
messages
• You can subscribe and publish messages in any
number of of places
12. Delegates
• Very solid pattern
• Vigorously multitude of Cocoa classes
(UITableView, UICollectionView, UIAlterView..
etc.)
• You have to define the protocol of the
messages you send
13. A Personal Note…
• I consumed delegates without really
understanding how they work
• I used to be scared of trying to implement
one myself
15. Delegates
• Very solid pattern
• Vigorously multitude of Cocoa classes
(UITableView, UICollectionView, UIAlterView..
etc.)
• You have to define the protocol of the
messages you send
16. Define a Delegate
Protocol
• Very solid pattern
• Vigorously multitude of Cocoa classes
(UITableView, UICollectionView, UIAlterView..
etc.)
• You have to define the protocol of the
messages you send
18. Delegating Methods in
the Protocol
• In our Video class, where need be, we will
delegate respective messages
@implementation Video
//..
!
if (self.delegate && [self.delegate
respondsToSelector:@selector(video:updatedTime)]) {
[self.delegate video:updatedTime];
}
//..
@end
19. Implement Protocol
#include "Video.h" // needed to include the @delegate protocol
info
!
@interface VideoPlayer : UIViewController <VideoDelegate>
@end
!
@implementation VideoPlayer
//..
!
-(void)video:(Video *)video updatedTime:(NSUInteger)currentTime{
// HURRAY! We know what the currentTime is :)
}
!
//..
@end
20. A parting note…
with great SUPER power
comes great SUPER
responsibility!