標籤:des style color io 使用 ar strong 檔案 div
protocol:協議 (相當於C#中的介面)
協議最多用在:代理模式、觀察者模式 OC中類只支援單繼承,但是
可以遵守多份協議 <協議1,協議2,協議3。。。。。>定義一個名叫MyProtocol的協議@protocol MyProtocol @end 只要一個類遵守了謀一份協議,就能擁有這份協議中所有的方法聲明 一個類遵守某份協議的方法: @interface Person : NSObject
<MyProtocol> @end
: 繼承
<> 遵守協議 @protocol MyProtocol
@required //在這個關鍵字之後的方法聲明都要求實現,不實現就會有警告(預設就是@required)
@optional //在這個關鍵字之後的方法聲明不要求實現(不實現也不會有警告) @end 協議也可以遵守另一個協議(就像C#中介面可以實現另一個介面一樣) 一個協議遵守了另外一個協議,就可以擁有另一個協議的所有方法聲明
基協議: 1、NSObject是一個基類,最根本最基本的類,任何其他類最終都要繼承它 2、其實還有一個基協議,名字也叫NSObject,它是一個基協議,最根本最基本的協議 3、NSObject協議中聲明很多最基本的方法,比如description、retain、release等 4、建議每個新的協議都要遵守NSObject協議 可以使用協議限制物件類型: 要求obj,儲存的對象必須遵守MyProtocol協議、並且繼承了Person
Person<MyProtocol> *obj = [[Person alloc] init]; 一個類需要遵循協議的時候需要引用協議 一種方法是#import <MyProtocol.h> 一種方法是@protocol MyProtocol
(使用這種方法的時候需要再對應的 .m 檔案中#import <MyProtocol.h>)優先使用這種方法
總結: 1、協議的定義 @protocol 協議名稱 <NSObject> //方法聲明列表。。。。。 @end 2、如何遵守協議 -》類遵守協議 @interface 類名:父類名 <協議名稱1,協議名稱2........> @end -》協議遵守協議 @protocol 協議名稱 <其他協議名稱1,其他協議名稱2...........> @end 3、協議中方法聲明的關鍵字 -》@required(預設) 要求實現,如果沒有實現,會發出警告 -》@optional 不要求實現,怎樣都不會有警告 4、定義一個變數的時候,限制這個變數儲存的對象遵守某個協議 類名<協議名稱> *變數名; id<協議名稱> 變數名; NSObject<MyProtocol> *obj; id<MyProtocol> obj2; 如果沒有遵守對應的協議,編譯器會警告 5、@proerty中聲明的屬性也可以用做一個遵守協議的限制 @property (nonatomic , strong) 類名<協議名稱> *屬性名稱; @property (nonatomic , strong) id<協議名稱> 屬性名稱; @property (nonatomic , strong) Dog<MyProtocol> *dog; @property (nonatomic , strong) id<MyProtocol> dog; 6、協議可以定義在單獨的.h檔案中,也可以定義在某個類中 如果這個協議只用在某個類中,應該把協議定義在類中 如果這個協議用在很多類中,應該定義在單獨檔案中 7、分類可定義在單獨的 .h和 .m檔案中,也可定義在原來類中 一般情況下,都是定義在單獨檔案中 定義在原來類中的分類,只要求能看懂文法
Objective-C:10_protocol