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