Intro to Obj-C Design Patterns or Or how I learned to be less bad

Post on 27-Jul-2015

52 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

Transcript

Or how I learned to be less bad

Intro to Obj-C Design Patterns

Haris Amin

GLIMPSE

A fun way to meet new people through

Instagram

Design Patterns• Why do we care?

• Let’s explore two design patterns in Cocoa

1. Notification Center

2. Delegates

Notification Center

• NSNotificationCenter class

• Easiest to learn (IMHO) but also easiest to abuse

• Very flexible

Notification Center

• Let’s Grab a NotificationCenter ‘instance’

!

• Then PUBLISH a specific message (2 ways)

[NSNotificationCenter defaultCenter]

1. With content

2. Without Content

Publish Message Without Content

• We want to notify that something specific ‘happened’

• Method Signature

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender

Publish Message Without Content

• E.G. The Video’s current time just updated

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender

[[NSNotificationCenter defaultCenter] postNotificationName:@"TimeUpdated" object:self];

Publish Message With Content

• E.G. The Video’s current time just updated WITH the actual current time

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo

[[NSNotificationCenter defaultCenter] postNotificationName:@"TimeUpdated" object:self userInfo:@{@"currentTime": 20}];

Subscribing to a Message

• In our VideoPlayer class we will just subscribe to the NotificationCenter Message

- (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeUpdate:) name:@"TimeUpdated" object:nil];

- (void)handleTimeUpdate:(NSNotification *)note{ // note.userInfo is the CONTENT we passed // ... }

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

• 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

Notification Center… THE BAD

Delegates

• Very solid pattern

• Vigorously multitude of Cocoa classes (UITableView, UICollectionView, UIAlterView.. etc.)

• You have to define the protocol of the messages you send

A Personal Note…

• I consumed delegates without really understanding how they work

• I used to be scared of trying to implement one myself

TIME TO GAIN A SUPERPOWER!

Delegates

• Very solid pattern

• Vigorously multitude of Cocoa classes (UITableView, UICollectionView, UIAlterView.. etc.)

• You have to define the protocol of the messages you send

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

Define Protocol

@protocol VideoDelegate; !@interface Video: NSObject !@property (nonatomic, weak) id<VideoDelegate> delegate; !@end !@protocol VideoDelegate <NSObject> @required //... !@optional -(void)video:(Video *)video updatedTime:(NSUInteger)currentTime; !@end // end of delegate protocol

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

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

A parting note…

with great SUPER power comes great SUPER

responsibility!

Questions?

Cofounder/CO-CTO @itsglimpse

@harisamin

HARIS AMIN

top related