---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------
一、概念
協議類似於介面,用來宣告方法,乙個類遵守了協議,就等於擁有了這個協議中所有方法的宣告
二、作用
在**模式中經常用來規定物件必須具有的某些行為
三、使用方法
1、協議只有宣告沒有實現,所以只有.h檔案,使用@protocol關鍵字進行宣告
2、協議中的方法分兩種:
1>用@required關鍵字修飾的方法,遵守協議的類必須進行實現(預設)
2>用@optional關鍵字修飾的方法,遵守協議的類可選擇進行實現
@protocol myprotocol // 宣告乙份協議,且這份協議遵守基協議nsobject
@required
- (void)test1;
@optional
- (void)test2;
@end
3、定義乙個變數的時候,限制這個變數儲存的物件遵守某個協議
1> 類名《協議名稱》 *變數名;
nsobject*obj;
2> id《協議名稱》 變數名;
idobj2;
3> 在@property中宣告的屬性也可用做乙個遵守協議的限制
① @property (nonatomic, strong) 類名《協議名稱》*屬性名;
@property (nonatomic, strong)dog*dog;
② @property (nonatomic, strong) id《協議名稱》屬性名;
@property (nonatomic, strong)iddog2;
4、協議也可以遵守其他協議
1> 遵守其他多個協議以逗號隔開
@protocol myprotocol2
2> 基協議
nsobject是最基本的協議,定義了description之類的基礎方法,建議遵守!
3> 當乙個協議遵守了其他協議時,就相當於擁有了其他協議的方法。
四、注意點
1、父類遵守了某個協議,相當於子類也遵守(因為子類繼承了父類的所有成員變數及方法)
2、協議可用定義在單獨.h檔案中,也可用定義在某個類中
1> 如果這個協議只用在某個類中,應該把協議定義在該類中
2> 如果這個協議用在很多類中,就應該定義在單獨檔案中
3、跟分模擬較
1> 分類可用定義在單獨.h和.m檔案中,也可用定義在原來類中
2> 但一般情況下,分類都是定義在單獨檔案(其目的就是為了在不更改原始類的基礎上擴充方法)
3> 定義在原來類中的分類,只要求能看懂語法(語法可行)
4、協議引用
1> 在類的宣告中遵守某份協議,可以不用#import該協議,只需@協議名稱即可(為了效能考慮,可提高編譯效率)
在類的實現中再#import協議。(因為宣告中只需要知道這是乙個協議,實現中才需要知道協議中具體有哪些方法)
2> 組合方式也可在宣告中@類名,實現中#import類,
五、**模式
設計乙個**類,幫助person類完成買票功能
1、person類宣告
#import @protocol ticketdelegate;
@inte***ce person : nsobject- (void) buyticket;
// 擁有乙個**屬性
@property (nonatomic, strong) iddelegate;// id代表**的類名隨便,但必須遵守ticketdelegate協議
@end
2、person類實現
#import "person.h"
#import "ticketdelegate.h"
@implementation person
// 買電影票
- (void)buyticket
@end
3、協議宣告
#import // 宣告一些方法
@protocol ticketdelegate // 返回票價
- (double) ticketprice;
// 還剩多少張票
- (int) leftticketsnumber;
@end
4、**類
//宣告
#import @protocol ticketdelegate;
@inte***ce nextagent : nsobject@end
//實現
#import "nextagent.h"
#import "ticketdelegate.h"
@implementation nextagent
- (double)ticketprice
- (int)leftticketsnumber
@end
5、主函式呼叫
#import #import "person.h"
#import "agent.h"
#import "nextagent.h"
int main()
---------------------- asp.net+unity開發、.net培訓、期待與您交流! ----------------------詳細請檢視:www.itheima.com
黑馬程式設計師 OC基礎
asp.net unity開發 net培訓 期待與您交流!1.import的用途 1 跟 include一樣,拷貝檔案的內容 2 可以自動防止檔案的內容被重複拷貝 2.import nsobjcruntime.h中有nslog函式的宣告,一般用 3.foundation框架標頭檔案的路徑 4.主標頭...
黑馬程式設計師 OC基礎 記憶體管理
oc的區域性變數在 塊結束時被系統銷毀,記憶體被 oc的物件,內部有引用計數器,當引用計數器的值為0時,被系統銷毀,記憶體被 區域性變數存放在棧中.物件存放在堆中.注意,物件指標還是存放在棧中,物件本身占用的記憶體存放在堆中.在oc中,我們要對自己寫的繼承了nsobject的物件進行記憶體管理.物件...
黑馬程式設計師 OC封裝
物件導向的三大特性 封裝 繼承和多型 在開發過程中,考慮到安全性要求,我們一般不在成員變數名前面使用 public protected等關鍵字修飾,而是使用set方法來為物件提供成員變數的值。set方法的內部也可以對一些不合理的賦值進行篩選過濾。set方法的作用 為外界提供乙個設定成員變數值的方法 ...