Categories
When programmer wants to add some more functionality to the class, typically extend the class. But this is not a right way everywhere, so like ruby Objective-C also provides categories to achieve this. Categories allows programmer to add functionality to already existing classes without extending them.
In the example given below we have a class BaseClass that has some methods and the second class SubClass that is used to add a method to the BaseClass. In the main, we have created object of base class and use the method defined in the sub class.
Example:
This is code of primary class.
| BaseClass.h | BaseClass.m |
#import<Foundation/NSObject.h> @interface BaseClass : NSObject {
int num1, num2;
}
-(void)set :(int) x and: (int) y;
-(int)add;
-(int)sub;
@end
|
#import"BaseClass.h" @implementation BaseClass -(void)set :(int) x and: (int) y { num1 = x; num2 = y; } -(int)add { return num1+num2; } -(int)sub { if(num1>num2){ return num1-num2; } else return num2-num1; } @end |
This is code of sub class that is used to add method in the primary class.
| SubClass.h | SubClass.m |
#import"BaseClass.h" @interface BaseClass(Category) -(void)show:(int)x; @end
|
#import"SubClass.h" @implementation BaseClass(BaseClass) -(void)show:(int)x {
printf("Result is : %d \n",x);
}
@end
|
main.m
#import"BaseClass.m" #import"SubClass.m" #import<stdio.h> int main(){
BaseClass *obj = [[BaseClass alloc] init];
[obj set:10 and:8];
[obj show:[obj add]];
[obj show:[obj sub]];
[obj release]; return 0; } |
Output:
Result is : 18 Result is : 2 |