有時,可能會發現希望通過添加僅在某些情況下有用的行為來擴展現有類。 要向現有類添加此類擴展,Objective-C提供了類別和擴展。
如果需要向現有類添加方法,或許為了添加功能以便在應用程式中更容易地執行某些操作,最簡單的方法是使用類別。
聲明類別的語法使用@interface
關鍵字,就像標準的Objective-C類描述一樣,但不表示子類的任何繼承。在括弧中指定類別的名稱,如下所示 -
@interface ClassName (CategoryName)
@end
1. 類別的特徵
即使沒有原始實現源代碼,也可以為任何類聲明類別。在類別中聲明的任何方法都可用於原始類的所有實例,以及原始類的任何子類。
在運行時,類別添加的方法與原始類實現的方法之間沒有區別。
現在,來看一個類別實現的示例。在Cocoa類NSString
中添加一個類別。此類別將使可以添加一個新方法getCopyRightString
,它返回版權字串。 如下所示 -
#import <Foundation/Foundation.h>
@interface NSString(MyAdditions)
+(NSString *)getCopyRightString;
@end
@implementation NSString(MyAdditions)
+(NSString *)getCopyRightString {
return @"Copyright y ii bai.com 2019";
}
@end
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *copyrightString = [NSString getCopyRightString];
NSLog(@"Accessing Category: %@",copyrightString);
[pool drain];
return 0;
}
執行上面示例代碼,得到以下結果:
2018-11-16 02:45:34.949 main[131207] Accessing Category: Copyright y ii bai.com 2019
即使類別添加的任何方法都可用於類及其子類的所有實例,仍需要在任何源代碼檔中導入類別頭檔,否則將遇到編譯器警告和錯誤。
在上面示例中,由於只有一個類,因此沒有包含任何頭檔,在這種情況下應該包含如上所述的頭檔。
上一篇:
Objective-C數據封裝
下一篇:
Objective-C Posing