分類:
分類是給原有的類擴充一系列的方法,在不改變源**的情況下給類新增 方法的簡便方法,無需建立子類。
分類的一些注意事項:
1,分類不能新增成員變數,自能訪問原始類的成員變數
2,分類可以重寫原類的方法,但是這樣做會導致原類的方法不能再使用
3,可以建立多個分類
4,分類宣告的方法不必全都實現
5,通過分類新增方法會影響原類和其子類
原類:
#import @inte***ce fraction : nsobject
- (void)setto:(int)a andover:(int)b;
@end
通過分類的方法給fraction新增加減乘除四個函式
#import //這裡既有對分類介面部分的定義,也有對現有介面的擴充套件,所以必須包含#import "foundation"
#import "foundation"
//分類名稱mathops
@inte***ce fraction (mathops)
- (fraction *)add:(fraction *)f;
- (fraction *)sub:(fraction *)f;
- (fraction *)mul:(fraction *)f;
- (fraction *)div:(fraction *)f;
@end
協議:協議的宣告類似於介面的宣告,協議沒有父類,不能自定義成員變數
乙個協議的宣告
@protocol myprotocol - (void)myprotocolmethod;
@end
協議是多個類共享的乙個方法列表,協議中宣告的方法都不用實現,
如果乙個類要採用這個協議,那麼必須實現,- (voidmyprotocolmethod方法
乙個類採用的協議
@inte***ce fraction : nsobject
如果採用多個協議
@inte***ce fraction : nsobject
注意:
1,如果乙個類遵守了某個協議,那麼它的子類也遵守這個協議
2,任何類都可以遵守某個協議
3,通過在型別名稱之後的尖括號中新增協議名稱,可以借助編譯器的幫助來檢查變數的一致性
id currentobject;
這是告訴編譯器currentobject將包含遵守drawingprotocol協議的物件。如果向currentobject指派靜態型別的對想愛你個,這個物件不遵守drawingprotocol協議,編譯器將給出warning。
4,如果這個變數儲存的物件遵守多個協議,則可以列出多項協議,如下
id drawingprotocol1l> currentobject;
5,定義一項協議時,可以擴充套件現有的協議的定義,一下
@protocol drawing3d
說明drawing3d協議也採用了drawing,因此採用drawing3d協議的類都必須實現此協議流出的方法以及drawing協議的方法
6,分類也可以採用乙個協議
@inte***ce fraction(stuff)
此處,fraction擁有乙個分類stuff,這個分類採用了nscoping和nscoding協議
OC中的分類和協議
oc中經常使用分類和協議,分類和協議在專案後期可能會經常用到,尤其是為某個已經成熟的模組新增功能的時候。因為 1 使用分類 category 可以以模組的方式向類新增方法 2 建立標準化的方法類表供其他人實現 下面將對分類和協議做乙個詳細介紹。一 分類 使用場景 1 有時候在處理類定義時,可能想要為...
OC語言BLOCK和協議
oc語言 block 和協議一 bolck 一 簡介 block是什麼?蘋果推薦的型別,效率高,在執行中儲存 用來封裝和儲存 有點像函式,block 可以在任何時候執行。bolck和函式的相似性 1 可以儲存 2 有返回值 3 有形參 4 呼叫方式一樣。識別符號 二 基本使用 1 定義block變數...
OC語言BLOCK和協議
oc語言 block 和協議一 bolck 一 簡介 block是什麼?蘋果推薦的型別,效率高,在執行中儲存 用來封裝和儲存 有點像函式,block 可以在任何時候執行。bolck和函式的相似性 1 可以儲存 2 有返回值 3 有形參 4 呼叫方式一樣。識別符號 二 基本使用 1 定義block 變...