簡單介紹iOS開發(fā)中關(guān)于category的應(yīng)用
創(chuàng)建category文件:
這里,一定要選好base的class, 如下:
無論一個類設(shè)計的如何完美,都不可避免的會遇到?jīng)]有預(yù)測到的需求,那怎么擴展現(xiàn)有的類呢?當然,繼承是個不錯的選擇。但是Objective-C提供了一種 特別的方式來擴展類,叫Catagory,可以動態(tài)的為已經(jīng)存在的類添加新的行為。這樣可以保證類的原原來的基礎(chǔ)上,較小的改動就可以增加需要的功能。使 用Category對類進行擴展時,不需要訪問其源代碼,也不需要創(chuàng)建子類,這樣我們可以擴展系統(tǒng)提供的類。Category使用簡單的方式,實現(xiàn)了類的相關(guān)方法的模塊化,把不同的類方法分配到不同的分類文件中。
通過一個簡單的例子看看Category如何使用。
現(xiàn)在我們有一個類叫MyClass
#import
@interface MyClass : NSObject
-(void) myPrint;
@end
#import "MyClass.h"
@implementation MyClass
-(void) myPrint{
NSLog(@"myPrint 調(diào)用了");
}
@end
它有一個實例方法:myPrint,待會我們可以在擴展后調(diào)用它
好了,有了上面的MyClass后,我們要在不增加子類,不修改MyClass類的情況下增加一個HelloWorld的方法,怎么添加呢?只需添加兩個文件MyClass+HelloWorld.h 和 MyClass+HelloWorld.m。
在聲明文件和實現(xiàn)文件中用“()”把Category的名稱括起來。原類名+Category”的這是約定的文件命名方式。
看看這兩個文件怎么實現(xiàn),在Xcoed上按Command+N,新建文件,選擇Objective-C category方式創(chuàng)建類,這樣Xcode會自動幫你創(chuàng)建約定命名方式的文件。
Category on的類是MyClass,選對了哦
這樣Xcode就幫你創(chuàng)建了MyClass+HelloWorld.h 和 MyClass+HelloWorld.m這兩個文件了。
那么我們現(xiàn)在添加一個HelloWorld方法??纯磳崿F(xiàn)后的代碼如下:
#import "MyClass.h"
@interface MyClass (HelloWorld)
-(void)HelloWorld;
@end
#import "MyClass+HelloWorld.h"
@implementation MyClass (HelloWorld)
-(void)HelloWorld{
NSLog(@"你好 倫敦奧運!");
}
@end
在main中調(diào)用
MyClass *myclass = [[[MyClass alloc]init]autorelease];
[myclass HelloWorld];
[myclass myPrint];
運行打印結(jié)果:
2012-08-09 11:24:16.697 objectiveC[16053:403] 你好 倫敦奧運!
2012-08-09 11:24:16.699 objectiveC[16053:403] myPrint 調(diào)用了
那的Category的使用場景有那些呢:
1、類包含了很多個方法實現(xiàn),而這些方法需要不同團隊的成員來實現(xiàn)
2、當你在使用基礎(chǔ)類庫中的類時,你不想繼承這些類而只想添加一些方法時。
Category能實現(xiàn)上面的需求,當然也有使用Category是需要注意的問題:
1、Category可以訪問原始類的實例變量,但不能添加實例變量,如果想添加變量,那就通過繼承創(chuàng)建子類來實現(xiàn)。
2、Category可以重載原始類的方法,不大不推薦這么做,這樣會覆蓋掉原始類的方法。如果確實要重載,那就通過繼承創(chuàng)建子類來實現(xiàn)。
3、和普通接口有所區(qū)別的是,在Category的實現(xiàn)文件中的實例方法只要你不去調(diào)用它你可以不用實現(xiàn)所有聲明的所有方法。
相關(guān)文章
IOS簡單實現(xiàn)瀑布流UICollectionView
這篇文章主要為大家介紹了IOS簡單實現(xiàn)瀑布流UICollectionView的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01iOS體驗性優(yōu)化之RTL適配右滑返回的實現(xiàn)
這篇文章主要給大家介紹了關(guān)于iOS體驗性優(yōu)化之RTL適配右滑返回實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01iOS開發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)
這篇文章主要介紹了iOS開發(fā)中UILabel設(shè)置字體的相關(guān)技巧小結(jié),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01