類目 延展 協議

2021-06-21 21:22:12 字數 2763 閱讀 8263

1.類目

類目就是為已存在的類新增新的方法。但是不能新增例項變數。比如系統的類,我們看不到他的.m檔案,所以沒有辦法用直接新增方法的方式去實現。

@inte***ce nsmutablearray (sort) //為nsmutablearray類新增sort方法,sort就是類目名,做到見名知意

-(void)invert;//方法

@end

實現部分

#import "nsmutablearray+sort.h"

@implementation nsmutablearray (sort)

-(void)invert

}@end

在主函式裡邊可以直接呼叫上邊的invert方法

nsmutablearray * arr = [[nsmutablearray alloc]initwithobjects:@"12",@"4",@"89",@"88",@"36", nil];    

[arr invert];    

nslog(@"%@",arr);

列印結果:

2012-08-13 11:12:03.324 類目[980:14503] (

36,88,

89,4,

12 )

category的使用場景有那些呢:

1、類包含了很多個方法實現,而這些方法需要不同團隊的成員來實現

2、當你在使用基礎類庫中的類時,你不想繼承這些類而只想新增一些方法時。

category能實現上面的需求,當然也有使用category是需要注意的問題:

1、category可以訪問原始類的例項變數,但不能新增例項變數,如果想新增變數,那就通過繼承建立子類來實現。

2、category可以過載原始類的方法,不大不推薦這麼做,這樣會覆蓋掉原始類的方法。如果確實要過載,那就通過繼承建立子類來實現。

3、和普通介面有所區別的是,在category的實現檔案中的例項方法只要你不去呼叫它你可以不用實現所有宣告的所有方法。

2.延展

延展的作用就是定義自己的私有方法。

形式和類目相同,不用新建立檔案,只是把類目的inte***ce地方的檔案放在了你需要擴充套件的類的.m檔案裡邊。

#import "student.h"

@inte***ce student (extension)//為student類建立乙個私有的方法text

-(void)text;

@end

@implementation student

-(void)hello;

-(void)text

@end

外界  [student hello]的時候就會列印出「你好」。但是在外界不能呼叫text方法,[student text]是不對的。只能在.m檔案裡邊通過self來呼叫私有方法text。隱藏了內部的實現。

3.協議

(1).協議宣告了可以被其他的類實現的方法。協議本身必不會去實現。

(2).協議不是類,只是乙個其他物件可以實現的介面。

定義乙個協議:

#import

@protocolmarryprotocol 

//定義乙個結婚協議,結婚協議也可以繼承其它的協議。

@required   //必須遵守的協議,在遵守

marryprotocol

協議的類的.m檔案中去實現裡邊的方法。

- (void)washclothes;

- (void)cook;

@optional  //可選的協議

- (void)makemoney;

@end

**(委託)模式:自己有需求,但是讓別人去做。

定義乙個men類

#import

#import "roomservice.h" 

@inte***ce men : nsobject

@property(nonatomic,retain)nsstring * name;

@property(nonatomic,assign)id mate;//定義乙個**

-(id)initwithname:(nsstring *)name;

-(void)needeat;

@end

定義乙個women類

#import

#import "

marryprotocol"

@inte***cewomen : nsobject <

@inte***cewomen : nsobject <

marryprotocol>  //遵守協議

@property(nonatomic,retain)nsstring * name;

-(id)initwithname:(nsstring *)name;

@end

@property(nonatomic,retain)nsstring * name;

-(id)initwithname:(nsstring *)name;

@end

在men的實現裡邊

-(void)needeat

在women的實現裡邊有乙個方法

-(void)cook

主函式裡邊

men.mate = women;

[men needeat];

列印出:wonmen正在做飯

4.協議也可以寫在乙個類裡邊,用到的時候引入類的標頭檔案就可以。

延展 協議 類目

一.延展 1.延展以 inte ce開頭,然後寫當前延展的類名,類名後加乙個 到 end結束 2.一般延展會寫在自己寫的.m檔案中,把一些不想讓外部呼叫的屬性放在延展裡,這樣這條屬性只能夠在類的內部使用,外部使用不了,盡最大可能保護當前類的安全 3.類目一般是給看不見.m的檔案進行擴充套件,延展一般...

類目, 延展, 協議

1.類目 類目就是為已存在的類新增新的方法。但是不能新增例項變數。比如系統的類,我們看不到他的.m檔案,所以沒有辦法用直接新增方法的方式去實現。inte ce nsmutablearray sort 為nsmutablearray類新增sort方法,sort就是類目名,做到見名知意 void inv...

iOS 類目,延展,協議

1.類目 類目就是為已存在的類新增新的方法。但是不能新增例項變數。比如系統的類,我們看不到他的.m檔案,所以沒有辦法用直接新增方法的方式去實現。inte ce nsmutablearray sort 為nsmutablearray類新增sort方法,sort就是類目名,做到見名知意 void inv...