天天看點

OC--category(類目、分類、類别)

category:在我看到的各種資料中,通常有3中翻譯:類目、分類、類别。其實都是一個意思,表示對一個類的擴充。

category使用的優點:

可以随時給類添加方法,這種添加不需要去建立子類的,而且添加的方法可以被子類繼承。

使用category可以很好的将類中的方法進行分類管理。

category的缺點:

隻能添加方法,不能添加執行個體變量。

如果對原有類中方法覆寫,會引起super消息的斷裂,是以,在category中一般不要覆寫原有方法。

在我的開發過程中,對于category的使用場景多是對于代碼優化的需求,友善代碼的管理。在多人合作的開發中,如若需要給别人寫的類中添加一些方法,而又不想去動别人寫的代碼,這個時候,category就是一個最好的選擇了。還有一種情況就是在建立一個類的時候,為了友善代碼的管理,希望不同功能的方法能夠放在一起,這樣檢視和修改的時候都會很友善。

例如:有一個資料的管理類,最常見的寫法是建立一個類以後将資料的增删改查都寫在一起。這樣檢視的時候,就很沒有效率。這個時候要是使用分類,将增、删、改、查的方法按照功能寫到不同的分類中,這樣代碼就簡潔多了。

類别有着自己的命名規則:類名+拓展方法名  如:Data+add。

OC--category(類目、分類、類别)

關于類目如何建立這裡就不說了,在百度就可以搜尋出來很多。

建立完add這個分類以後,我們就希望在add這個分類中去處理資料類的添加,将資料添加相關的方法都寫在這個分類中:

Data+Add.h中的代碼:

#import "Data.h"

@interface Data (Add)

- (void)addData;

@end

Data+Add.m中的代碼:

#import "Data+Add.h"

@implementation Data (Add)

- (void)addData{

    NSLog(@"類目中的添加資料方法");

}

@end

這樣一個簡單的類目就寫好了,将添加的方法寫到了add這個分類中。這樣以後要是遇到需要修改添加的方法的時候,直接找到這個Add分類,對分類中的方法進行修改就行了,不用再去Data類中去一個個的去找方法,找到add方法以後再去修改了。代碼看着也整潔多了。同樣的也可以将删除的方法寫到另一個delete分類中去。

除了可以給我們自己建立的類添加分類外,我們有時候也可以給系統類添加分類。比如給NSString這個類添加一個JSON分類,來處理一些我們需要的JSON解析的功能。