7、分类

来源:互联网 发布:linux连接工具 ssh 编辑:程序博客网 时间:2024/06/01 17:53

分类概念

分类(Category)允许向一个类文件中添加新的方法声明,它 不需要使用子类机制,并且在类实现的文件中的同一个名字下定义这些方法。其语法举例如下:

#import "ClassName.h"@interface ClassName ( CategoryName ) // 方法声明@end

分类实例

前面多态性中曾经使用过Vector和Scalar的例子,下面我们为 Vector增加“减”sub的方法。

Vector+sub.h文件

#import <Foundation/Foundation.h>#import "Vector.h"@interface Vector (sub) -(Vector *) sub: (Vector *) v; @end

Vector+sub.m文件

#import "Vector+sub.h"@implementation  Vector (sub) -(Vector *) sub: (Vector *) v {    Vector *result = [[Vector alloc] init];    [result setVec1: vec1 - [v vec1] andVec2: vec2 - [v vec2]];     return result;}@end

调用的main函数

#import <Foundation/Foundation.h>#import "Vector+sub.h"int main (int argc, const char * argv[]) {    Vector *vecA =[[Vector alloc] init];        Vector *vecB =[[Vector alloc] init];    id result;    //set the values    [vecA setVec1: 3.2 andVec2: 4.7];    [vecB setVec1: 32.2 andVec2: 47.7];    // print it    [vecA print];    NSLog(@" + ");    [vecB print];    NSLog(@" = ");    result = [vecA add: vecB];    [result print];    [vecA print];    NSLog(@" - ");    [vecB print];    NSLog(@" = ");    result = [vecA sub: vecB];    [result print];    // free memory    [vecA release];    [vecB release];    [result release];    return 0;}

小结

其中result = [vecA add: vecB]中的add:是Vector类原有 的方法,result = [vecA sub:vecB]中都sub:是Vector分 类添加的方法。 分类是在Java和C++等面向对象的语言中没有的概念,分类本质上是通过Objective-C的动态绑定而实现的。通过分类 使用能够达到比继承更好的效果。

0 0
原创粉丝点击