Objective C語法之Category的使用

2021-06-25 09:43:57 字數 2356 閱讀 1456

無論乙個類設計的如何完美,都不可避免的會遇到沒有**到的需求,那怎麼擴充套件現有的類呢?當然,繼承是個不錯的選擇。但是objective-c提供了一種特別的方式來擴充套件類,叫catagory,可以動態的為已經存在的類新增新的行為。這樣可以保證類的原原來的基礎上,較小的改動就可以增加需要的功能。使用category對類進行擴充套件時,不需要訪問其源**,也不需要建立子類,這樣我們可以擴充套件系統提供的類。category使用簡單的方式,實現了類的相關方法的模組化,把不同的類方法分配到不同的分類檔案中。

通過乙個簡單的例子看看category如何使用。

現在我們有乙個類叫myclass

[cpp]view plain

copy

#import 

@inte***ce myclass : nsobject  

-(void) myprint;  

@end  

[cpp]view plain

copy

#import "myclass.h"

@implementation myclass  

-(void) myprint  

@end  

它有乙個例項方法:myprint,待會我們可以在擴充套件後呼叫它

好了,有了上面的myclass後,我們要在不增加子類,不修改myclass類的情況下增加乙個helloworld的方法,怎麼新增呢?只需新增兩個檔案myclass+helloworld.h  和 myclass+helloworld.m。

在宣告檔案和實現檔案中用「()」把category的名稱括起來。原類名+category」的這是約定的檔案命名方式。

看看這兩個檔案怎麼實現,在xcoed上 按command+n,新建檔案,選擇objective-c category方式建立類,這樣xcode會自動幫你建立約定命名方式的檔案。

category on的類是myclass,選對了哦

這樣xcode就幫你建立了myclass+helloworld.h  和 myclass+helloworld.m這兩個 檔案了。

那麼我們現在新增乙個helloworld方法。看看實現後的**如下:

[cpp]view plain

copy

#import "myclass.h"

@inte***ce myclass (helloworld)  

-(void)helloworld;  

@end  

[cpp]view plain

copy

#import "myclass+helloworld.h"

@implementation myclass (helloworld)  

-(void)helloworld  

@end  

在main中呼叫

[cpp]view plain

copy

myclass *myclass = [[[myclass alloc]init]autorelease];  

[myclass helloworld];  

[myclass myprint];  

執行列印結果:

[cpp]view plain

copy

2012-08-09 11:24:16.697 objectivec[16053:403] 你好 倫敦奧運!  

2012-08-09 11:24:16.699 objectivec[16053:403] myprint 呼叫了  

那的category的使用場景有那些呢:

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

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

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

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

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

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

!

Objective C語法之Category的使用

無論乙個類設計的如何完美,都不可避免的會遇到沒有 到的需求,那怎麼擴充套件現有的類呢?當然,繼承是個不錯的選擇。但是objective c提供了一種特別的方式來擴充套件類,叫catagory,可以動態的為已經存在的類新增新的行為。這樣可以保證類的原原來的基礎上,較小的改動就可以增加需要的功能。使用c...

Objective C語法property詳解

1.1 property的語法格式 property 引數1,引數2 型別名字 這裡的引數,主要有以下三種 setter getter方法 assign retain copy 讀寫屬性 readwrite readonly atomicity nonatomic 1.2 三種方式的使用 assig...

Objective C基本語法

oc的語法這裡就不給大家介紹了,大家慢慢熟悉。在oc的程式設計中大家可能不常見到c語言中函式的使用了,oc採用的是訊息傳送機制,將方法傳送給物件。方法分為 加號方法 靜態方法,又稱為類方法,由類來呼叫 方法由加號開頭。減號方法 動態方法,又成為物件方法,由物件來呼叫 方法由加號開頭。例如常見的all...