類別是一種爲現有的類添加新方法的方式。你可以爲任何類添加新的方法,包括那些你沒有源代碼的類。
類別的聲明格式與類的聲明格式相似:
@interface NSString(NumberConvenience)
-(NSNumber *)IengthAsNumber;
@end
該聲明具有兩個特點。首先,現有的類位於@interface關鍵字之後,其後是位於圓括號中的一個新名稱。該聲明表示,類別喝的名稱是NumberConvenience,而且該類別將向NSString類中添加IengthAsNumber方法。但不能添加新實現變量,因此與類的聲明不同的是,類別的聲明中沒有實例變量部分。
與@interface部分對應的還有一個@implementation部分,你可以在@implementation部分實現自己的方法。
@implementation NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber
{
unsigned int length = [self length];
return ([NSNumber numberWithUnsignedInt:lenght]);
}
@end
類別的侷限性:
第一:無法向類中添加新的實例變量。類別沒有位置容納實例變量
第二:名稱衝突,即類別中的方法與現有的方法重名。當發生名稱衝突時,類別具有更高的優先級。你的類別方法將完全取代初始方法,從而無法再使用初始方法。
類別的作用:
將類的實現分散到多個不同文件或多個不同框架中,
創建對私有方法的前向引用,
向對象添加非正式協議