iOSDay19之OC類的擴充套件

2021-07-11 18:07:52 字數 4143 閱讀 4221

為乙個類擴充套件功能:1.子類化;2.修改源**;3.定義協議;4.category:類目

category:也叫分類,類目,是為沒有源**的類擴充功能。

擴充的功能會成為原有類的一部分,可以通過原有類或者原有類的物件直接呼叫,並且可繼承。

該方法只能擴充方法,不能擴充例項變數。

作為子類的替代手段(不需要定義子類,直接使用現有類的物件呼叫方法)。

乙個龐大的類可以分模組開發,能夠更好的對類中的方法進行更新和維護。

1

@inte***ce nsstring (addmethod) //

宣告sayhi方法

23 + (void

)sayhi;45

@end

類名(副檔名)

—— addmethod:是擴充套件的類名,nsstring是原有類名。

1

@implementation nsstring (addmethod) //

實現sayhi方法

2 + (void

)sayhi

4@end

1

#import

2#import

"nsstring+addmethod.h"3

int main(int argc, const

char *argv)

11return0;

12 }

為能夠獲得源**的類新增私有的例項變數和方法。

注意:延展操作的類必須是能夠獲得源**的類(具有.m檔案的類)

1

//宣告

2@inte***ce

teacher()

36 - (nsinteger)getsalary; //

宣告乙個領工資的方法

7@end89

@implementation

teacher

10//

實現領工資的操作

11 -(nsinteger)getsalary

16@end

main.m中呼叫getsalary

通過延展呼叫的方法屬於私有方法,外界是沒有訪問許可權的,只能在當前類的.m檔案中訪問

category 和 extension 的區別

作用不同:category是擴充套件類的功能的,extension是用來給類宣告私有方法和例項變數的。

category存放在一對.h .m檔案中,extension存放在.m檔案中。

extension可以新增例項變數,category

不可以。

delegate設計模式的使用我們首先需要明白三個要素-委託方,**方,協議。

委託方:委託別人去執行某些操作的人(物件)。

協議(protocol):委託方需要**方執行的操作。

**方:被委託去執行某些操作的人(物件)。

協議是一套標準(一堆方法的宣告),只有.h檔案。協議的定義以@protocol開始,以@end結束。

比如:宣告乙個結婚協議:

1

@protocol marryprotocol 2

3 @required //

必須實現的

4 - (void)makemoney; //賺錢5

6 @optional //

可選的7 - (void)cooking; //做飯8

9@end

步驟1:委託方制定一套協議(在委託方的.h檔案中),協議中宣告委託方需要讓**方執行的方法(只有方法宣告)。

步驟2:委託方宣告乙個delegate

屬性(assign修飾),儲存**方物件。

步驟3:**方需要遵守協議,並且對協議中的方法進行實現。

步驟4:將**方設定為委託方的**人(將**方物件賦值給委託方物件的delegate屬性,進行儲存)

步驟5:委託方在合適的時機通知**方物件去執行相應的操作。

找保姆,要求保姆完成:1.洗衣服。2.做飯。3.打掃房間。4.照看孩子。

協議hireprotocol.h檔案

1

#import23

@protocol hireprotocol 45//

1.洗衣服

6 - (void

)washclothing;78

//2.做飯

9 - (void

)cooking;

1011

//3.打掃房間

12 - (void

)cleanhouse;

1314

//4.照看孩子

15 - (void

)careforchild;

1617

@end

employer(雇主)類:

宣告employer.h檔案

1

#import

2#import

"hireprotocol.h"3

4@inte***ce

employer : nsobject

56 @property (nonatomic, retain) id

nanny; //

被僱傭的保姆78

//1.衣服髒了

9 - (void

)clothingdirty;

1011

//2.餓了

12 - (void

)hungry;

1314

//3.房子亂了

15 - (void

)housemess;

1617

//4.出門了

18 - (void

)goout;

1920

@end

實現employer.m檔案

1

#import

"employer.h"2

3@implementation

employer45

//1.衣服髒了

6 - (void

)clothingdirty710

11//

2.餓了

12 - (void

)hungry

1316

17//

3.房子亂了

18 - (void

)housemess

1922

23//

4.出門了

24 - (void

)goout

2528

29@end

nanny(保姆)類:

宣告nanny

.h檔案

1

#import

2#import

"hireprotocol.h"3

4@inte***ce nanny : nsobject56//

屬性自己看著寫...78

@end

實現nanny.m檔案

1

#import

"nanny.h"2

3@implementation

nanny45

//1.洗衣服

6 - (void

)washclothing710

11//

2.做飯

12 - (void

)cooking

1316

17//

3.打掃房間

18 - (void

)cleanhouse

1922

23//

4.照看孩子

24 - (void

)careforchild

2728

@end

主函式main.h

1

#import

2#import

"employer.h"3

#import

"nanny.h"4

5int main(int argc, const

char *argv)

27return0;

28 }

OC 類的擴充套件

類的擴充套件 繼承 類目延展 協議 1.類目 category 命名 inte ce 要擴充套件的類名 類目名 end 特點 1.不可定義成員變數,而且一般不定義屬性 2.可以新增方法,可重寫原始類的方法,原始類的物件呼叫 2.延展 extension 命名 寫在.m檔案裡 inte ce 類名 e...

OC 類的擴充套件

girl.h protocol marry 協議的內容 方法宣告 required是必須實現的方法,預設必須實現 optional是可選擇執行的方法 required void makemoney optional void cook 2.設定 人屬性 property nonatomic,assi...

IOS day01 OC中類的建立以及使用

oc中定義類 1 設計乙個車類 2 implementation car nsobject3 這個大括號裡面寫所有的屬性410 11 void run 14 end 必須以 implementation開頭,以 end結尾 public下面的變數都是公共的 定義方法的時候必須以 開頭,返回值需要用 ...