Print Shortlink

Plain Old Objective-C class – IV

The equivalent of interfaces in Java and C# in Objective-C are the Protocols and not the @interface that you use to declare the methods and variables. A protocol is defined using @protocol directive. It can have mandatory and optional members. A class needs to implement the mandatory methods declared in the protocol, if the “interface” of the class follows it. A simple protocol Shape with area and draw methods is shown below.

@protocol Shape <NSObject>
    -(NSInteger) area;

    -(void) draw;

As you can Shape is a protocol with area and draw methods. Shape protocol itself conforms to NSObject protocol.

Let’s create an interface Circle that uses the Shape protocol as shown below.

#import "Shape.h"

@interface Circle : NSObject<Shape> {
    NSInteger radius;
@property NSInteger radius;

Circle interface inherits NSObject and follows the Shape protocol. The protocol list is specified within the angular brackets < >. The Circle implementation is shown below

#import "Circle.h"

@implementation Circle
    @synthesize radius;

    return 3.14 * radius * radius;

    NSLog(@"Drawing circle");

Circle implementation needs to implement the area method, though the draw method is optional. The main function is shown below.

int main (int argc, const char * argv[])
    Circle *circle = [Circle alloc];
    circle.radius = 22;
    NSLog(@"Area: %ld",[circle area]);
   if([circle conformsToProtocol:@protocol(Shape)])
       NSLog(@"Circle conforms to Shape protocol");

We have created a Circle object and also used the conformsToProtocol method that checks if circle object conforms to Shape protocol. It’s easier to understand protocols if you have worked with interfaces in Java/.NET languages.

Leave a Reply