為乙個類擴充套件功能: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下面的變數都是公共的 定義方法的時候必須以 開頭,返回值需要用 ...