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.
[2024]Digital Global Overview Report 2024 Meltwater.pdf
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!