正式協議是乙個命名的方法列表。但與非正式協議不同的是,正式協議要求顯式地採用協議。採用協議的方法是在類的@inte***ce宣告中列出協議的名稱。採用協議意味著你承諾實現協議的所有方法。否則,編譯器將發出警告提醒。
宣告協議
例如cocoa宣告的乙個協議---nscopying .
@property nscopying
-(id ) copywithzone:(nszone *)zone ;
@end
這裡使用@protocol告訴編譯器:「下面將是乙個新的正式協議。」@protocol後面是協議名稱(必須唯一)。協議宣告列表,協議的每乙個採用者都必須實現這些方法,宣告以@end 結尾,使用協議不引入新的例項變數。
例子:cocoa的nscoding協議:
@protocol nscoding
-(void )encodewithcoder:(nscoder *)acoder;
-(id )initwithcoder:(nscoder *)adecoder;
@end
當某個類採用nscoding協議時,意味著該類承諾實現這兩個方法。encodewithcoder:方法用於接收物件的例項變數並將其轉換為nscoder類的物件。initwithcoder:方法從nscoder類的物件中提取經過轉換的凍結的例項變數並使用他們初始化乙個新物件。這兩個方法總是成對出現。
採用協議
要採用某個協議,可以在類的生命中列出該協議的名稱,並用尖括號將協議括起來。
@inte***ce car:nsobject //按順序列出協議
//methods
@end
複製
copy方法可以複製物件,copy訊息通知物件建立乙個全新的物件,並使新物件與接收copy的源物件一樣。
複製的種類:
黑馬程式設計師 protocol協議
ios培訓 android培訓 期待與您交流!protocol用來宣告一大堆方法,但是不宣告成員變數 只要某乙個類遵守了這個協議,那麼這個類就擁有了協議裡的所有的方法。協議protocol與分類一樣不能宣告屬性,但是不同的是分類是給某個類擴充套件一些方法,但是只要乙個類遵守了協議protocol就可...
黑馬程式設計師
asp.net android ios開發 net培訓 期待與您交流!map hashtable 底層是雜湊表資料結構,不可以存入null鍵和null值。該執行緒是同步的,jdk1.0出現,效率低。hashmap 底層是雜湊表資料結構,允許使用null鍵和null值。該集合執行緒是不同步的,將has...
黑馬程式設計師
1.了解反射 反射 就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。person p new person p.使用 要想這樣使用,首先你必須得到class檔案物件,其實也就是得到class類的物件。2.反射中的類 class類 成員變數 field類 構造方法 const...