OC學習 protocol的使用

2021-07-02 16:46:37 字數 1743 閱讀 2776

protocol (協議)可以用來宣告一堆的方法。

@protocol 協議名稱

//方法的宣告列表

@end

例如:

@protocol mydogprotocol - (void)dogtest;

@end

1、乙個類遵守協議:

@inte***ce 類名 : 父類名 《協議名稱1, 協議名稱2, ……>

@end

例如:

@inte***ce hashiqi : dog - (void)addtest;

@end

2、協議遵守協議:

@protocol 協議名稱 《其他協議名稱1, 其他協議名稱2, ……>

@end

例如:

@protocol myprotocol2  - (void)haha2;

- (void)haha3;

@end

1、@required

要求實現此關鍵字後面的方法,如果沒實現,會發出警告。

2、@optional

不要求實現此關鍵字後面的方法。

注意:@required是預設的。即如果不寫@required 或 @optional ,預設為 @required。

例如:

@protocol xyzpiechartviewdatasource

- (nsuinteger)numberofsegments;

- (cgfloat)sizeofsegmentatindex:(nsuinteger)segmentindex;

@optional // 可選的方法標誌,直到 @required 標誌,都是可選的方法

- (nsstring *)titleforsegmentatindex:(nsuinteger)segmentindex;

- (bool)shouldexplodesegmentatindex:(nsuinteger)segmentindex;

@required // 必須的方法標誌,以下都是必須的方法

- (uicolor *)colorforsegmentatindex:(nsuinteger)segmentindex;

@end

上面的示例中定義乙個有著三個必須實現的方法和兩個可選擇實現的方法的協議。

使用語法:

類名 《協議名稱》 *變數名;

或id  《協議名稱》 變數名;

例如:

nsobject *obj;

id obj2;

通常寫作:

@property (nonatomic, strong) 類名 《協議名稱》 *屬性名;

或:@property (nonatomic, strong) id 《協議名稱》 屬性名;

例如:

@property (nonatomic, strong) dog *dog;

或:

@property (nonatomic, strong) dog *dog;

1、如果這個協議只用在該類中,應該把協議定義在類中。

2、如果這個協議用在很多類中,應該把它寫在單獨的.h檔案中。

注意:分類也可寫在單獨檔案中或定義在類中,但大多數情況下都是定義在單獨檔案中。

OC學習那些事 Protocol

1.procotol 簡單來說就是一系列方法的列表,其中宣告的方法可以被任何類實現。這種模式一般稱為 delegation 模式。在ios和os 2.procotol 的使用 protocol study 預設是 require void test3 required表示必須實現的方法 雖然是必須實...

OC學習那些事 Protocol

1.procotol 簡單來說就是一系列方法的列表,其中宣告的方法可以被任何類實現。這種模式一般稱為 delegation 模式。在ios和os 2.procotol 的使用 protocol study 預設是 require void test3 required表示必須實現的方法 雖然是必須實...

OC中的協議( protocol)

我們之前講過非正式協議 nsobject的類目 那麼肯定還有正式協議。在oc中,乙個類可以實現多個協議,通過協議可以彌補單繼承的缺陷。但是協議跟繼承不一樣,協議只是乙個方法的列表,方法的實現得靠遵循該協議的類去完成。協議 協議是一套標準,這個標準裡面宣告了很多方法,但是不關心具體這些方法是怎麼實現的...