標籤:style java color 使用 檔案 os
1.什麼是協議?
2.協議與類別的聲明和使用
1.什麼是協議?
在Objective-C中,不支援多繼承,即不允許一個類有多個父類,但是OC提供了類似的實現方法,也就是協議。協議有點類似於Java裡的介面,不同點就是在協議裡,可以提供可選的方法,不要求全部繼承。
協議包括正式協議和非正式協議。
正式協議:其聲明一個方法列表,協議的實現者需要實現聲明的方法,可以使用@required和@optional關鍵字指定方法必須實現或可選實現,預設為必須實現。子類會繼承其父類採用的協議,一個協議本身也可以採用別的協議
非正式協議(類別):類別是Objective-C的一個語言特點,可以讓你在無需子類化的前提下為一個類增加方法。凡是NSObject或其子類的類別,都是非正式協議。一個類不必實現非正式協議中的每個方法,只需實現它想要的方法就可以。聲明非正式協議的類在向某個目標對象發送協議訊息之前,必須首先向它發送respondsToSelector:訊息並得到肯定的回答,才可以使用。
2.協議與類別的聲明和使用
正式協議的聲明很簡單,在類聲明的上方
@protocol ProtocolName
//方法聲明
@end
在另一個採納協議的類中聲明
@interface ClassName:NSObject<NSCopying>
{
//執行個體變數
}
//方法
@end
也可以採用多個協議,只需用逗號隔開
@interface ClassName:NSObject<NSCopying,NSCoding>
{
//執行個體變數
}
//方法
@end
聲明可選和必須實現的協議
@protocol ProtocolName
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end//MyProtocol
非正式協議(類別)聲明和使用,類別名也要符合駱駝命名法。類別的聲明和實現可以放在單獨的 ”類別名.h/類別名.m“中,也可以放在已有類的.h/.m檔案中。
@interface ClassName(categoryName)
//方法定義
@end
實現
@implementation ClassName(categoryName)
//方法實現
@end
需要注意的是類別只能添加方法,不能添加執行個體變數。
------------------------------------------------------------------------------------------------------------------------
不聲明類別名的時候,是匿名類別或類擴充,可以為已存在的類添加執行個體變數,方法。只能放置在已有類的.h/.m中
@interface ClassName(){
//執行個體變數--只能在自身類內使用
}
//方法定義--在.h檔案中聲明為公開的,在.m中聲明的方法為私人的。
@end