国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Objective-C中的分類與協議

2019-11-14 20:34:36
字體:
來源:轉載
供稿:網友

                                                                                         分類                                                                                                

在談分類之前,我們可以先探究下,OC中為什么出現分類這種機制,有什么好處?

假設你接到一個大項目:計算兩個整數的和,差。接到任務的你馬上動手。編寫代碼如下:

#import <Foundation/Foundation>@interface Calculate :NSObject@PRoperty  int number1,number2;- (int) sumNumber1:(int)num1 andNumber2: (int)num2;//加法- (int) subNumber1:(int)num1 andNumber2: (int)num2; //減法- (void)print;@end

好了,完成工作。

幾天后,客戶需求發生變化,不僅需要加法,減法功能,還要能做到乘除。我們的做法一般是直接在Calculate類中添加乘,除的方法。當然在這里是沒有任何問題的。但是在現實的項目中,代碼量十分巨大,以及業務邏輯相當復雜的情況下,直接修改之前源代碼是冒有很大的風險的!

現在我們有了另一種做法那就是——分類。

#import <Foundation/Foundation>#import”Calculate”//既然是對原有類的接口的擴展,所以必須包括原始接口@interface Calculate(MulAndDiv)//告訴編譯器這是為Calculate定義的分類名為MulAndDiv- (int) MulNumber1:(int)num1 andNumber2: (int)num2;//乘法- (int) DivNumber1:(int)num1 andNumber2: (int)num2; //除法@end

這樣我們就做到了在不修改原先代碼的情況下,完成了功能的擴展!

但是使用分類要注意以下事項:

1. 分類可以訪問原類中的成員變量,但是在分類不能添加任何變量。若需要添加變量可以考慮創建子類

2. 分類中的方法名可以與原類的某個方法名相同(即重載),但是原類的同名方法將失效,不能訪問。

3. 可以創建很多的分類

4. 不必實現分類的所有方法。可以在分類中聲明所有的方法,但不實現,在需要的時候再去實現。

5. 通過分類添加的方法是可以被子類繼承的。

                                                                                             協議                                                                                            

初次接觸協議的人,可能很難理解。協議也可以理解為規則或約定。這就像我們都必須遵守的法律,法律中有憲法,刑法,民法。。。。包含很多的方方面面,告訴了我們在不同情況下,應該怎么做。法律是有使用范圍的,中國的法律,只要是中國公民就必須遵守,但是美國人就可以不遵守。同樣中國人也可以不遵守美國的法律!

OC中的協議即相當與生活中的法律,它定義了很多的方法,但是并沒有實現!這需要遵守此協議的類去實現這些方法。這就像你遵守法律去納稅,但法律本身并不納稅。

協議沒有父類,并且不能定義成員變量(這里有句臺詞:還有王法嗎?王法?我就是王法!顯然法律也不能成為某一個人的,同時法律沒有身體,不會吃飯)

協議是多個類共享的一個方法列表,協議中列出方法沒有相應的實現,如果一個類采用名為MyProtocol的協議,就必須實現MyProtocol協議內的@required(必須的)標識的方法。協議用@optional標識的方法可選實現!

協議的使用方法:

@interface Person :NSObject  <chinaProtocol>

這條語句告訴編譯器,Person遵守chinaProtocol協議

如果采用多項協議,只需要他們都列在尖括號中,用逗號分開:

@interface Person :NSObject  <chinaProtocol  , englishProtocol>

有關協議的總結:

1. 如果一個類遵守某項協議,那么它的子類也遵守該協議

2. 協議是無類的(classless),任何類都可以遵守某項協議

3. 可以在類型名稱后添加 <協議名> ,可以讓編譯器幫助檢查變量的一致性

4. 如果變量保存的對象遵守多項協議,可以列出多項協議

5. 定義一項協議時,可以擴展現有協議,即新的協議也遵守舊的協議

@proticol Drawing3D  <Drawing>

Drawing3D協議也采用了Drawing協議,因此采用Drawing3D協議的類必須實現Drawing3D列出的方法以及Drawing列出的方法

6. 分類也可以采用一項協議

@interface Person(chinaPerson) <NSCopying,NSCoding>

說明Person類擁有一個分類chinaPerson,這個分類遵守NSCopying 和NSCoding協議

 

以上純屬本人理解,有不正確之處,歡迎指正!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥德县| 信宜市| 子洲县| 古浪县| 江安县| 仁怀市| 盐津县| 新巴尔虎左旗| 沙坪坝区| 朝阳区| 建湖县| 额敏县| 秀山| 青田县| 保靖县| 贺兰县| 陇南市| 广汉市| 嵊泗县| 上饶市| 镇康县| 新兴县| 图片| 泗阳县| 公安县| 双辽市| 湘阴县| 介休市| 仲巴县| 章丘市| 宁武县| 道孚县| 清涧县| 五家渠市| 三江| 南陵县| 石门县| 庄浪县| 恩施市| 射洪县| 沅陵县|