標籤:
Category
OC提供了一種與眾不同的方式——可以動態為已經存在的類添加新的行為(方法)。
這樣可以保證類的原始設計規模較小,功能增加時再逐步擴充。
並且使用Category對類進行擴充時,不需要建立子類。
Category使用簡單的方式,實現了類的相關方法的模組化,把不同的類方法分配到不同的分類檔案中。
可以喂任何類添加新的方法,包括那些沒有原始碼到類。
習慣將類別代碼放在獨立的檔案中,通常以“類名稱+類別名稱”的風格命名。
現在我們為NSString類添加一個類別hello。步奏如:
1 File-New-New File,或者按Command+N快速鍵,彈出。
2 選擇Objective-C File,點擊Next。彈出:
3 填寫類別名稱Hello,選擇檔案類型為Category,Class填寫給哪個類添加類別。
這樣後會建立兩個檔案:NSString+Hello.h和NSString+Hello.m。
NSString+Hello.h
#import <Foundation/Foundation.h>@interface NSString (Hello)-(void)haha;@end
NSString+Hello.m
#import "NSString+Hello.h"@implementation NSString (Hello)-(void)haha{ NSLog(@"NSString haha");}@end
在使用的地方需要匯入類別的標頭檔
#import <Foundation/Foundation.h>#import "NSString+Hello.h"typedef int (^MySum)(int, int);int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"abcdef"; [str haha]; } return 0;}
輸出結果為:
2016-08-11 17:42:25.622 命令列工程[6126:275845] NSString haha
可以為任何類添加任意數量的類別,當然要保證類別名稱唯一。
缺陷:
1 類別中無法添加新的執行個體變數,可以添加屬性。
2 名稱衝突:類別中的方法與現有方法重名,此時類別具有更高的優先順序。
Objective-C 12 Category