Protocols and Delegates
Remarks#
Protocols and Delegates are two related but different concept:
A Protocol is a interface a class can conforms to, meaning that class implements the listed methods.
A Delegate is typically an anonymous object that conforms to a protocol.
The application of Delegate called Delegation is a design pattern.
At one end we have the concept of Inheritance which creates a tight coupling between the subclass and its superclass whereas Delegation design pattern provides an alternative to avoid this tight coupling using which we can create a much looser relationship based on anonymous Delegate objects.
Implementation of Protocols and Delegation mechanism.
Suppose you have two views ViewA
and ViewB
Instance of ViewB
is created inside ViewA
, so ViewA
can send message to ViewB's
instance, but for the reverse to happen we need to implement delegation (so that using delegate ViewB's
instance could send message to ViewA
)
Follow these steps to implement the delegation
-
In
ViewB
create protocol as@protocol ViewBDelegate -(void) exampleDelegateMethod; @end
-
Declare the delegate in the sender class
@interface ViewB : UIView @property (nonatomic, weak) id< ViewBDelegate > delegate; @end
-
Adopt the protocol in Class ViewA
@interfac ViewA: UIView < ViewBDelegate >
-
Set the delegate
-(void) anyFunction { // create Class ViewB's instance and set the delegate [viewB setDelegate:self]; }
-
Implement the delegate method in class
ViewA
-(void) exampleDelegateMethod { // will be called by Class ViewB's instance }
-
Use the method in class
ViewB
to call the delegate method as-(void) callDelegateMethod { [delegate exampleDelegateMethod]; //assuming the delegate is assigned otherwise error }