詳解Objective-C中分類和協(xié)議操作
Objective-C中分類和協(xié)議操作是本文要介紹的內(nèi)容,主要從Objective-C的分類、協(xié)議、合成對象等內(nèi)容,詳細(xì)的講述了本文內(nèi)容,不多說,我們先來看詳細(xì)內(nèi)容。
一、分類
提供了一種簡單的方式,用它可以將類的定義模塊化到相關(guān)方法的組成分類中。提供了擴展現(xiàn)有類定義的簡便方式,并不必訪問的源代碼,也無需創(chuàng)建子類。
類分類的一些注意事項:
(1)盡管分類可以訪問原始類的實例變量,但是它不能添加自身的任何變量,添加子類。
(2)分類可以重載給類中的另一個方法(認(rèn)為此做法拙劣)。
(3)和一般接口不同,不必實現(xiàn)分類中的所有方法。
(4)對象/分類命名必須是***的。
二、協(xié)議
協(xié)議是多個類共享的一個方法列表。協(xié)議中列出的方法沒有相應(yīng)的實現(xiàn),由其他人來實現(xiàn)。協(xié)議提供一種方式來使用指定的名稱定義一組多少有點相關(guān)的方法。
定義協(xié)議:使用@protocol指令,之后為協(xié)議名稱,然后和處理接口部分一樣聲明一些方法。以@end結(jié)束。如:
- @protocol NSCopying
- -(id)copyWithZone:(NSZone *)zone;
- @end
通過在@interface行的一對尖括號(<……>)內(nèi)列出協(xié)議名稱,可以告知編譯器正采用一個協(xié)議。這項協(xié)議的名稱放在類名和它的分類名稱之后。如:
- @interface AddressBook:NSObject <NSCopying>
如果類中有多項協(xié)議,只需把它們都列在尖括號中,用逗號分開。如:
- @interface AddressBook:NSObject <NSCopying,NSCoding>
一個類遵循一個協(xié)議,其子類也遵守該協(xié)議。
如果希望繼承你的類的用戶實現(xiàn)一些方法,則可以使用協(xié)議定義這些方法。如:
- @protocol Drawing
- -(void) paint;
- -(void) erase;
- @optional
- -(void) outline;
- @end
協(xié)議不引用任何類,它是無類的。
可以使用conformsToProtocol:方法檢查一個對象是否遵循某項協(xié)議。如:
- id currentObject;
- ……
- if([currentObject conformsToProtocol:@protocol(Drawing)]==YES)
- {……}
- id <Drawing> currentObject;
currentObject將包含遵守Drawing協(xié)議對象。"<>"中可加入多項協(xié)議,用逗號隔開。
定義一項協(xié)議可以擴展現(xiàn)有協(xié)議的定義。如:
- @protocol Drawing3D <Drawing>
分類也可以采用一項協(xié)議。如:
- @interface Faction (Staff) <NSCoping,NSCoding>
非正式協(xié)議實際上是一個分類。非正式協(xié)議通常是為根定義的。實際上是一個名稱下的一組方法,可以將它們實現(xiàn)為協(xié)議的一部分。聲明非正式協(xié)議的類并不實現(xiàn)這些方法,并且選擇實現(xiàn)這些方法的子類需要在它的接口部分重新聲明這些方法,同時還要實現(xiàn)這些方法中的一個或多個。如果一個對象采用正式協(xié)議,那么它則必須遵守協(xié)議中的所有信息。如果一個對象采用非正式協(xié)議,那么它可能不需要采用此協(xié)議的所有方法,具體取決于這項協(xié)議。
三、合成對象
另一項涉及和定義一個包含其他類的一個或多個對象的技術(shù)。如:
- @interface Square:NSObject
- {Rectangle *rect;}
- -(int) setSide:(int)S;
- -(int) side;
- -(int) area;
- -(int) perimeter;
- @end;
小結(jié):詳解Objective-C中分類和協(xié)議操作的內(nèi)容介紹完了,希望本文對你有所幫助!