Objective-C 2.0中Category簡明教程
Objective-C 2.0中Category簡明教程是本文要介紹的內容,先來簡單認識一下Category,Category為我們提供了區(qū)別于繼承的另外一種方法來對類進行擴展。我們可以向任何已有的類添加成員函數(shù)來實現(xiàn)功能上的擴展(注:category只允許添加成員函數(shù),不能添加數(shù)據(jù)成員),添加的函數(shù)可以訪問類中所有的數(shù)據(jù)成員,該類的子類也將繼承新添加的成員函數(shù)。
假設我們需要擴展前面幾節(jié)用到的book類,添加一個名為Abstract的成員函數(shù)來輸出書籍的摘要。使用category的格式為:
在頭文件中聲明category:
@interface 需要擴展的類(category名稱) //需要添加的函數(shù) @end
可以看到,聲明category的方法同類的聲明非常類似?;氐轿覀兊睦?,如果我們需要向Book類添加Abstract成員函數(shù),對應的聲明文件如下所示
- // // Book+Abstract.h
- #import <Cocoa/Cocoa.h>
- #import "Book.h"
- @interface Book(Abstract)
- -(NSString*) Abstract;
- end
注意推薦的文件命名規(guī)則:類名+category名.h
接下來我們需要對添加的abstract函數(shù)進行定義,如下所示:
- // // 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文件的命名規(guī)則與頭文件相似:類名+category名.m
作為演示,我們只是在Abstract函數(shù)中簡單的輸出一個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;
- }
為什么對類進行擴展的feature被稱作category?該名稱應該反映了某種初衷,那就是當某個類比較復雜龐大時,我們可以對它的功能(也就是成員函數(shù))進行分類,并且把它們放入不同的文件加以實現(xiàn)。
小結:Objective-C 2.0中Category簡明教程的內容介紹完了,希望通過本文的學習能對你有所幫助!