Objective-C 2.0中Category简明教程

移动开发 iOS
Objective-C 2.0中Category简明教程是本文要介绍的内容,先来简单认识一下Category,Category为我们提供了区别于继承的另外一种方法来对类进行扩展。

Objective-C 2.0Category简明教程是本文要介绍的内容,先来简单认识一下CategoryCategory为我们提供了区别于继承的另外一种方法来对类进行扩展。我们可以向任何已有的类添加成员函数来实现功能上的扩展(注: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  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

注意推荐的文件命名规则:类名+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  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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;  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

为什么对类进行扩展的feature被称作category?该名称应该反映了某种初衷,那就是当某个类比较复杂庞大时,我们可以对它的功能(也就是成员函数)进行分类,并且把它们放入不同的文件加以实现。

小结:Objective-C 2.0Category简明教程的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-17 10:00:12

Objective-CProperty

2012-06-15 09:47:48

Objective-CCategory

2011-07-08 13:49:46

Objective-C UUID

2009-08-06 17:45:08

C# Webservi

2013-12-03 13:05:30

Lua脚本语言

2011-08-17 15:37:23

Objective-C垃圾收集

2011-08-01 11:37:41

iPhone Objective- 内存

2011-07-27 17:10:30

Objective-C 持久化

2011-08-05 14:03:39

Objective-C 对象 模板

2009-09-02 17:38:19

C#开发GIS

2014-06-20 10:51:35

Linux LVM逻辑卷

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-07-29 16:08:31

Objective-C 内存

2011-08-22 09:48:16

WindowsObjective-C

2023-10-20 14:08:35

digDNS

2011-06-03 08:49:54

Java

2011-08-15 17:47:13

Objective-CisMemberOfC

2011-07-21 09:42:27

Objective-C 内存 Autoreleas

2013-06-20 10:40:32

Objective-C实现截图

2011-05-11 11:20:26

Objective-C
点赞
收藏

51CTO技术栈公众号