Objective-C 2.0中Category简明教程
Objective-C 2.0中Category简明教程是本文要介绍的内容,先来简单认识一下Category,Category为我们提供了区别于继承的另外一种方法来对类进行扩展。我们可以向任何已有的类添加成员函数来实现功能上的扩展(注:category只允许添加成员函数,不能添加数据成员),添加的函数可以访问类中所有的数据成员,该类的子类也将继承新添加的成员函数。
假设我们需要扩展前面几节用到的book类,添加一个名为Abstract的成员函数来输出书籍的摘要。使用category的格式为:
在头文件中声明category:
@interface 需要扩展的类(category名称) //需要添加的函数 @end
可以看到,声明category的方法同类的声明非常类似。回到我们的例子,如果我们需要向Book类添加Abstract成员函数,对应的声明文件如下所示
// // Book+Abstract.h #import <Cocoa/Cocoa.h> #import "Book.h" @interface Book(Abstract) -(NSString*) Abstract; end
注意推荐的文件命名规则:类名+category名.h
接下来我们需要对添加的abstract函数进行定义,如下所示:
// // Book+Abstract.m #import "Book+Abstract.h" @implementation Book(Abstract) -(NSString*)Abstract{ NSString* retstr = [[NSString alloc]initWithString:@"The story is..."]; [retstr autorelease]; return retstr; } @end
implementation文件的命名规则与头文件相似:类名+category名.m
作为演示,我们只是在Abstract函数中简单的输出一个NSString。下面我们来看客户端如何调用:
#import <Foundation/Foundation.h> #import "Book.h" #import "Book+Abstract.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString* name = [[NSString alloc] initWithString:@"Harry Porter"]; NSNumber* number = [[NSNumber alloc] initWithInt:100]; Book *book = [[Book alloc] initWithTitle:name andNumofpages:number]; [number release]; [name release]; NSLog(@"Abstract: %@", [book Abstract]); [book release]; [pool drain]; return 0; }
相关推荐
84407518 2012-07-16
87214552 2015-10-27
84407518 2016-01-25
89283517 2012-06-19
ObjectiveC 2012-06-14
zhujiangtaotaise 2020-01-01
AllenG 2013-07-07
Beatopcoder 2013-07-14
afrtooylsw 2014-05-14
让编程改变世界 2015-03-13
shqhope 2015-04-09
zoutian00 2015-05-12
huangshm 2019-01-14
86981633 2019-06-29
我的iOS王者之路 2019-06-28
好好学习天天 2019-06-28