簡(jiǎn)單介紹iOS開(kāi)發(fā)中關(guān)于category的應(yīng)用
創(chuàng)建category文件:

這里,一定要選好base的class, 如下:

無(wú)論一個(gè)類設(shè)計(jì)的如何完美,都不可避免的會(huì)遇到?jīng)]有預(yù)測(cè)到的需求,那怎么擴(kuò)展現(xiàn)有的類呢?當(dāng)然,繼承是個(gè)不錯(cuò)的選擇。但是Objective-C提供了一種 特別的方式來(lái)擴(kuò)展類,叫Catagory,可以動(dòng)態(tài)的為已經(jīng)存在的類添加新的行為。這樣可以保證類的原原來(lái)的基礎(chǔ)上,較小的改動(dòng)就可以增加需要的功能。使 用Category對(duì)類進(jìn)行擴(kuò)展時(shí),不需要訪問(wèn)其源代碼,也不需要?jiǎng)?chuàng)建子類,這樣我們可以擴(kuò)展系統(tǒng)提供的類。Category使用簡(jiǎn)單的方式,實(shí)現(xiàn)了類的相關(guān)方法的模塊化,把不同的類方法分配到不同的分類文件中。
通過(guò)一個(gè)簡(jiǎn)單的例子看看Category如何使用。
現(xiàn)在我們有一個(gè)類叫MyClass
#import
@interface MyClass : NSObject
-(void) myPrint;
@end
#import "MyClass.h"
@implementation MyClass
-(void) myPrint{
NSLog(@"myPrint 調(diào)用了");
}
@end
它有一個(gè)實(shí)例方法:myPrint,待會(huì)我們可以在擴(kuò)展后調(diào)用它
好了,有了上面的MyClass后,我們要在不增加子類,不修改MyClass類的情況下增加一個(gè)HelloWorld的方法,怎么添加呢?只需添加兩個(gè)文件MyClass+HelloWorld.h 和 MyClass+HelloWorld.m。
在聲明文件和實(shí)現(xiàn)文件中用“()”把Category的名稱括起來(lái)。原類名+Category”的這是約定的文件命名方式。
看看這兩個(gè)文件怎么實(shí)現(xiàn),在Xcoed上按Command+N,新建文件,選擇Objective-C category方式創(chuàng)建類,這樣X(jué)code會(huì)自動(dòng)幫你創(chuàng)建約定命名方式的文件。
Category on的類是MyClass,選對(duì)了哦
這樣X(jué)code就幫你創(chuàng)建了MyClass+HelloWorld.h 和 MyClass+HelloWorld.m這兩個(gè)文件了。
那么我們現(xiàn)在添加一個(gè)HelloWorld方法。看看實(shí)現(xiàn)后的代碼如下:
#import "MyClass.h"
@interface MyClass (HelloWorld)
-(void)HelloWorld;
@end
#import "MyClass+HelloWorld.h"
@implementation MyClass (HelloWorld)
-(void)HelloWorld{
NSLog(@"你好 倫敦奧運(yùn)!");
}
@end
在main中調(diào)用
MyClass *myclass = [[[MyClass alloc]init]autorelease];
[myclass HelloWorld];
[myclass myPrint];
運(yùn)行打印結(jié)果:
2012-08-09 11:24:16.697 objectiveC[16053:403] 你好 倫敦奧運(yùn)!
2012-08-09 11:24:16.699 objectiveC[16053:403] myPrint 調(diào)用了
那的Category的使用場(chǎng)景有那些呢:
1、類包含了很多個(gè)方法實(shí)現(xiàn),而這些方法需要不同團(tuán)隊(duì)的成員來(lái)實(shí)現(xiàn)
2、當(dāng)你在使用基礎(chǔ)類庫(kù)中的類時(shí),你不想繼承這些類而只想添加一些方法時(shí)。
Category能實(shí)現(xiàn)上面的需求,當(dāng)然也有使用Category是需要注意的問(wèn)題:
1、Category可以訪問(wèn)原始類的實(shí)例變量,但不能添加實(shí)例變量,如果想添加變量,那就通過(guò)繼承創(chuàng)建子類來(lái)實(shí)現(xiàn)。
2、Category可以重載原始類的方法,不大不推薦這么做,這樣會(huì)覆蓋掉原始類的方法。如果確實(shí)要重載,那就通過(guò)繼承創(chuàng)建子類來(lái)實(shí)現(xiàn)。
3、和普通接口有所區(qū)別的是,在Category的實(shí)現(xiàn)文件中的實(shí)例方法只要你不去調(diào)用它你可以不用實(shí)現(xiàn)所有聲明的所有方法。
相關(guān)文章
iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能
ios 圖片壓縮有兩種方法,分別是,壓縮圖片質(zhì)量(Quality),壓縮圖片尺寸(Size),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01
ios基于UICollectionView實(shí)現(xiàn)橫向瀑布流
這篇文章主要為大家詳細(xì)介紹了ios基于UICollectionView實(shí)現(xiàn)橫向瀑布流,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
IOS應(yīng)用內(nèi)支付返回新舊Receipt適配的方法
本篇文章主要介紹了IOS應(yīng)用內(nèi)支付返回新舊Receipt適配的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
IOS開(kāi)發(fā)UIButton(左邊圖片右邊文字效果)
本篇文章主要實(shí)現(xiàn)了實(shí)現(xiàn)UIButton左邊圖片,圖片后面緊跟文字效果,類似微信發(fā)現(xiàn)功能,有需要的朋友可以了解一下。2016-10-10
iOS中的二級(jí)菜單及Cell的展開(kāi)收起示例
本篇文章主要介紹了iOS中的二級(jí)菜單及Cell的展開(kāi)收起示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-08-08
IOS開(kāi)發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器
這篇文章主要介紹了IOS開(kāi)發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器的相關(guān)資料,需要的朋友可以參考下2017-06-06

