分類 分類可以模塊化方法的定義,可以用於向現有的類添加新的方法。 分類提供了一種簡單的方式,用他可以將類的定義模塊化到相關方法的組或分類中。它還提供了拓展現有類定義的簡便方式,並且不必訪問類的源代碼,也無需創建子類。 分類可以通過兩種方法來實現: 1.繼承自一個分類:可以通過將分類名稱括在類名稱之後 ...
--------分類--------
- 分類可以模塊化方法的定義,可以用於向現有的類添加新的方法。
- 分類提供了一種簡單的方式,用他可以將類的定義模塊化到相關方法的組或分類中。它還提供了拓展現有類定義的簡便方式,並且不必訪問類的源代碼,也無需創建子類。
- 分類可以通過兩種方法來實現:
- 1.繼承自一個分類:可以通過將分類名稱括在類名稱之後的圓括弧中來確定方法所屬的分類。可以繼承自系統自帶的,也可以繼承自自己拓展的。
-
#import "Fraction" @interface Fraction (NSObject)//確定了一個繼承自NSObject的分類 //在這裡可以聲明新的方法 @end @implementation Fraction (NSObject) //在這裡可以實現新的方法或者重寫NSObject(在於繼承自哪個類)自帶的方法
@end- 2.類的拓展:創建一個未命名的分類,且在括弧“()”中不指定名字。這種特殊的語法稱為類的拓展。
-
#import "Fraction" @interface Fraction ()//在這裡可以聲明新的方法 @end @implementation Fraction () @end
-
註意:
-
1.如果在分類中覆寫了父類中的方法之後,那麼就再也不能訪問原來的方法了。所以在分類中覆寫方法要慎重。如果需要訪問原來的方法可以通過新建子類來實現
- 2.通過使用分類添加新方法來拓展類不僅會影響這個類,同時也會影響他的所有子類。
--------協議和代理--------
- 協議是多個類共用的一個方法列表。協議提供了一種方式,用指定的名稱定義一組多少有點相關的方法。如果需要,可以在自己的類定義中實現他們。
- 協議列出了一組方法,有些可以使選擇實現(@optional),有些是必須實現(@required)。
- 定義一組協議的方式:使用 @protocol 指令,後面跟上你給出的協議名稱。然後跟處理介面部分一樣,聲明一些方法。 @end 指令之前的所有方法聲明都是協議的一部分。
-
//例子
@protocol NSCopying -(id)copyWithZone:(NSZone *) zone; @end; - 如果你的類採用了NSCopy協議,則必須遵守實現名為copyWithZone的方法.通過在@interface行的一對<>內列出協議名,如果你的類實現了多項協議,協議之間用逗號分開。
- 可以告訴編譯器你正在使用一個協議.這項協議的名稱放在類名和它的父類名稱之後.協議不引用任何類型,它是無類的.任何類都可以遵守Drawing協議.
- 定義一項協議的時候,可以擴展現有的協議
- 非正式協議:
- 非正式協議中的方法不必全部實現。
- 非正式協議實際上就是一個分類.列出了一組方法,但是並沒有實現他們.每個人都繼承相同的跟對象,因此非正式分來通常是為跟類定義的.又是非正式協議又叫做抽象協議
- 聲明非正式協議的類並不自己實現這些方法,並且選擇實現這些方法的子類需要在他的介面部分重新聲明這些方法.同時還要是實現這些方法中的一個或多個
協議也是一種兩個類之間的介面定義。定義了協議的類可以看做是將協議定義的方法代理給了實現他們的類。這樣,類的定義可以更為通用,因為具體的動作由代理類來承擔,相應某些事件或者定義某些參數。