Category (分类)

您所在的位置:网站首页 category的意思 Category (分类)

Category (分类)

#Category (分类)| 来源: 网络整理| 查看: 265

前面学过了继承,可以对从父类中得到所有的成员,所谓站在巨人的肩膀上。换个角度去看这个问题,继承也是对现有的类进行扩充,这种扩充是纵向的,从父类到子类,再到子类的子类。得到了许多成员,有些是需要的,而有些是多余的。

在objC中提供了一种叫category的东西,中文一般翻译为“分类”或“类别”。它可以提供类功能的横向扩充。这种扩充有些时候更好用。

示例:

// Person.h #import @interface Person : NSObject @end // Person.m #import "Person.h" @implementation Person - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } @end// Worker.h #import "Person.h" @interface Worker : Person -(void)doWork; @end // Worker.m #import "Worker.h" @implementation Worker - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } -(void)doWork{ NSLog(@"do work.."); } @end// WorkerCategory.h #import "Worker.h" //分类,名称要与主类相同,小括号内为分类名称,自行决定名称。 @interface Worker (Category) -(void)strike; @end // WorkerCategory.m #import "WorkerCategory.h" @implementation Worker (Category) -(void)strike{ NSLog(@"我们在罢工!"); } @end

这个例子中,提供了父类Person,子类Worker,这就是一种典型的纵向扩充-继承。紧接着在WorkerCategory中我们写个一个分类,扩种了一个方法strke。当我们实例化一个Worker对象后可以调用strike方法,这就是一种横向扩展。

几点说明:继承可以得到父类内容,同时可以添加属性和方法。而分类只能添加方法,无其他功能。横向扩展的分类,给类中添加了新方法,但却不必其他成员。

从另外一个角度看这个问题,可以将一个复杂的类拆分成多个分类,逐个完成。有利于团队开发和后期维护。并且在使用中,可以根据需要决定import进来哪个分类,而无视不需要的分类。

示例2:

// NSDate_Ext.h #import @interface NSDate (NSDate_Ext) //判断是否是闰年 -(BOOL)isLeapYear; @end // NSDate_Ext.m #import "NSDate_Ext.h" @implementation NSDate (NSDate_Ext) -(BOOL)isLeapYear{ NSDateFormatter *f=[[NSDateFormatter alloc] init]; [f setDateFormat:@"yyyy"]; NSString *year=[f stringFromDate:self]; [f release]; int y= [year intValue]; if ((y%4==0 && y%100!=0) || y%400==0) { return YES; }else{ return NO; } } @end // main.m #import #import "NSDate_Ext.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSDate *now=[[NSDate alloc] init]; NSLog(@"%@",[now isLeapYear]?@"是闰年":@"不是闰年"); [pool drain]; return 0; }

示例3:

// NSStringExistNum.h #import @interface NSString (NSStringExistNum) -(NSUInteger)existNum:(char)c; @end // NSStringExistNum.m #import "NSStringExistNum.h" @implementation NSString (NSStringExistNum) -(NSUInteger)existNum:(char)c{ int num=0; for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3