[HMLY]12.iOS中的Protocol

來源:互聯網
上載者:User

標籤:void   擷取   選擇   prot   blank   ios7   也會   run   影響   

最近工作中遇到一個比較迷惑的事情,在我利用runtime擷取類的屬性的時候,由於類實現了一個自訂協議,導致遍曆出來的屬性中包含了NSObject協議中的property。查來查去,只是知道和protocol有關。晚上問了下朋友(iOS大神),結果被他一句點破。發現這部分知識點遺漏了一點。

protocol類似java中的interface,主要是用來定義一套對象之間的通訊規則。protocol也是我們設計時常用的一個東西,相對於直接繼承的方式,protocol則偏向於組合模式。因為在設計對象的時候,如果基類東西很多,而不同的子類又不一定都需要基類的東西,或者在絕大部分需要的同時,又有特殊的要求,那這個時候就很混亂了。採用介面,可以將不同的功能歸類為不同的介面,這樣,子類需要什麼功能,自己去實現這個介面,這樣在保持繼承性的同時,可以對功能進行擴充,而不影響其他類,也讓子類保持自己的特有性。

 

protocol文法:
@protocol protocolName//method//property@end

和類的聲明很相似,不僅可以聲明方法,同樣也可以聲明property。如果某個類需要實現某個介面,則只需要在類的申明後面加上<>,在裡面寫上要實現的協議名字,多個協議以逗號隔開。
@interface Test : NSObject <delegate1, delegate2>@end


protocol關鍵字:required,optional
@protocol TestProtocol@required- (void)requiredMethod;@optional- (void)optionalMethod;@end

protocol預設都是required的,一個類在實現協議的時候是必須要實現這些方法的。相對的,如果optional下面的方法,則表示類可以選擇性的實現。判斷這個類是否實現某個方法則只需調用[self.delegate respondToSelector:@selector()]
protocol的繼承

 

protocol和類一樣,同樣可以進行繼承,這個也是我遺漏的一點。

@protocol Test1Delegate@end@protocol Test2Delegate <Test1Delegate>@end;

這個時候,如果類實現了Test2Delegate這個協議,那麼也必須實現Test1Delegate裡面的方法。 我們自己寫的protocol的時候,一般Xcode都預設幫我們繼承了NSObject這個協議。如果你不繼承的話也沒啥大的影響,因為我們的對象都是繼承自NSObject,而NSObject也實現了NSObject這個協議。所以,當我們需要調用NSObject協議裡面的方法的時候,也不會出錯。不過蘋果還是推薦繼承NSObject這個協議。


protocol隱藏類的類型

在我們iOS開發中也會出現這種形式,比如iOS7的導覽列動畫,蘋果只是需要你返回一個實現了UIViewControllerAnimatedTransitioning這個協議的對象就行了。

還有一個可能在和第三方sdk打交道的時候見得比較多。在別人實現的架構裡面,有的時候,不希望把類的類型和裡面方法暴露給你,而你也不太可能直接建立這個對象。這個時候就可以採用protocol這個方式,讓調用者無需知道類的類型,一樣可以完成自己想要的操作。

id <Test1Delegate>obj = [XXXX  createObj];

調用者只需要通過[XXXX createObj]這個方法,擷取一個實現Test1Delegate而不知道類型的執行個體。在需要的地方,這個obj可以直接調用協議裡面的方法,因為,這個對象都已經實現了。

protocol 差不多就這麼多內容,比較簡單。

[HMLY]12.iOS中的Protocol

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.