在.NET中有一個非常帶勁的特性,那就是擴展方法. 擴展方法使你能夠向現有類型“添加”方法(包括你自定義的類型和對象噢),而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但是可以像擴展類型上的實例方法一樣進行調用。
先看看.NET中擴展方法的定義和使用
public static class test { public static bool In(this object o, IEnumerable c) { foreach (object obj in c) if (obj.Equals(o)) return true; return false; } } string[] list = new string[] { "abc" , "123", "C#"}; Console.WriteLine("Object C".In(list));
在.NET中Object 類並沒有In方法的定義,但是的確用"Object C"方法調用了In方法。
Object C中的分類(category) 又稱類別在不修改原有的類的基礎上增加新的方法,和.NET一樣不能添加新的實例變量。
新增一個Person的Object C對象,在Person.h文件中定義相應的書屬性name和age,並且定義一個方法:
-(void) addName:(NSString*) name1 andWithAge:(int) age1;

#import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *name; int age; } @property (retain) NSString *name; @property (nonatomic)int age; -(void) addName:(NSString*) name1 andWithAge:(int) age1; @end
Person 類的詳細描述文件如下:

#import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *name; int age; } @property (retain) NSString *name; @property (nonatomic)int age; -(void) addName:(NSString*) name1 andWithAge:(int) age1; @end
怎么調用這里就不說了,如果現在要往類Person中添加一個新的方法
-(void) addCate:(NSString*) cate;
新建一個PersonCategory 類,產生.h,.m兩個文件。
#import <Foundation/Foundation.h> #import "Person.h" @interface Person(cate) -(void) addCate:(NSString*) cate; @end
在PersonCategory.h文件中修改為如上代碼,將PersonCategory改為Person,並且后面括號為(cate) ; () 中的名字可以隨便取
#import "PersonCategory.h" @implementation Person(cate) -(void) addCate:(NSString *)cate{ NSLog(@"dafdasfdsa=%@",cate); } @end
修改PersonCategory.m文件中的代碼如上。通過以上代碼就可以往Person類中添加新方法 addCate 。
測試調用addCate方法如下:
Person *peron=[[Person alloc] init]; [peron addName:@"hechen" andWithAge:23]; [peron addCate:@"safdasfds"];
通過以上代碼可以看得出 Person 可以調用addCate方法了,當然調用addCate方法需要引入文件PersonCategory.h 文件。