标签:
分类可以使得不修改原来类的代码的基础上,对某个类进行方法的扩充。
来看一个简单的例子:
我们现有一个类Calculator我们为其实现了加法和减法方法:
#import "Foundation/Foundation.h" @interface Calculator : NSObject // Plus -(int) plus: (int)num1 and:(int)num2; // Less -(int) less: (int)num1 and:(int)num2; @end @implementation Calculator -(int) plus:(int)num1 and:(int)num2{ return num1 + num2; } -(int) less:(int)num1 and:(int)num2{ return num1 - num2; } @end
我们将上面Calculator的实现和声明分别置于Calculator.h和Calculator.m之中,现在的需求是,我们希望对这个计算器类进行扩充,使之能够进行乘法和除法运算,但因为分工问题,将乘法和除法分别给Tom和Jerry进行开发,但如果Tom和Jerry同时修改Calculator.h和Calculator.m会造成各种各样的冲突(实际开发中可能会使用SVN或者GIT来自动处理这些问题,但此处假设的需求远比实际需求简单得多),因此,我们希望Tom和Jerry各自新建不同的文件来进行开发,就需要使用到OC的分类。
Tom:
#import <Calculator.h> @interface Calculator(Tom) -(int)multiplied:(int)num1 and:(int)num2; @end @implementation Calculator(Tom) -(int)multiplied:(int)num1 and:(int)num2{ return num1 * num2; } @end
注:为了节省篇幅,将声明和实现写在一起,在下文我们仍然认为上面代码放置于Calculator+Tom.h和Calculator+Tom.m中,下同。
Jerry:
#import <Calculator.h> @interface Calculator(Jerry) -(double)except:(int)num1 and:(int)num2; @end @implementation Calculator(Jerry) -(double)except:(int)num1 and:(int)num2{ return num1 / num2; } @end
当我们需要使用时,分别引入Calculator.h、Calculator+Tom.h、Calculator+Jerry.h:
#import "Calculator.h" #import "Calculator+Tom.h" #import "Calculator+Jerry.h" int main(){ Calculator *calculator = [Calculator new]; [calculator plus:3 and: 4]; // output: 7 [calculator less:3 and: 4]; // output: -1 [calculator multiplied:3 and: 4]; // output: 12 [calculator except:3 and: 4]; // output: 0.75 return 0; }
标签:
原文地址:http://www.cnblogs.com/imabel/p/4421695.html