標籤:objective-c 分類 category
OC提供了一種可以在不修改類的源碼基礎上,擴充類的方法的功能,"分類"Category,這個機制和C#中的擴充方法類似,一般用於在不方便修改類的源碼時(如OC系統相關的類庫),但有有需求要拓展類的方法,可以使用分類來實現。
Java中應該是沒有提供相關的機制,但是Java可以通過動態代理來實現AOP,在切入點前後執行代碼邏輯,個人認為比OC還要方便。
//// Girl.h// 10_Category//// Created by apple on 14/12/23.// Copyright (c) 2014年 cc. All rights reserved.//#import <Foundation/Foundation.h>@interface Girl : NSObject//顯示MM的中文名- (NSString*)showEnglishName;@end//// Girl.m// 10_Category//// Created by apple on 14/12/23.// Copyright (c) 2014年 cc. All rights reserved.//#import "Girl.h"@implementation Girl- (NSString*)showEnglishName { return @"mm";}@end //// Girl+GirlCategory.h// 10_Category//// Created by apple on 14/12/23.// Copyright (c) 2014年 cc. All rights reserved.//#import "Girl.h"//OC分類的標頭檔//命名規範 基類+分類名.h/.m//格式 @interface 基類 (分類)//分類的作用:在不修改基類源檔案的基礎上,為基類動態擴充方法//通過分類Category可以在不修改OC或者IOS架構的源碼基礎上為這些類增加一些擴充方法//分類並非子類繼承的方式,而是直接對基類進行擴充@interface Girl (GirlCategory)//給Girl類增加一個顯示中文名字的方法- (NSString*)showChineseName;@end//// Girl+GirlCategory.m// 10_Category//// Created by apple on 14/12/23.// Copyright (c) 2014年 cc. All rights reserved.//#import "Girl+GirlCategory.h"@implementation Girl (GirlCategory)- (NSString*)showChineseName { return @"美眉";}@end//// main.m// 10_Category//// Created by apple on 14/12/23.// Copyright (c) 2014年 cc. All rights reserved.//#import <Foundation/Foundation.h>#include "Girl.h"#include "Girl+GirlCategory.h"int main(int argc, const char * argv[]) { @autoreleasepool { Girl* pGirl = [[Girl alloc] init]; //Girl基類中定義的方法 NSLog(pGirl.showEnglishName); //GirlCategory分類中擴充的方法 NSLog(pGirl.showChineseName); } return 0;}
Objective-C 分類Category