ios category(類別又稱分類)的優缺點

來源:互聯網
上載者:User

定義:類別是可以通過不使用繼承而為現有類添加新方法的一種機制

 

思考:為什麼蘋果添加這種完全可以通過繼承來實現的機制呢。是效能上的考慮亦或是使用上的便利。對於這個疑問,思考很久,個人覺得從效能上來講類別並不見得比繼承要好,僅僅是使用上的便利而已。比如說我想為某個類(NSString)添加一個方法用於檢測該類對象是不是用我需資料:

 

分類實現:

//NSString+Test.h

@interface NSString(Test)

-(BOOL)testDate;

@end

//NSString+Test.m

@implement NSString(Test)

-(BOOL)testDate{

...

}

@end

 

使用的時候:

#import"NSString+Test.h"

NSString *str = [[NSString alloc] initWithString: &"abc"];

BOOL bRet = [str testDate];

 

 分類的優缺點:

優點:

1. 改動少

使用的時候還是通過NSString對象,非常方便。想象一下,如果項目中需要添加testDate這個功能,而你通過繼承去實現(myString),將NSString替換為myString,整個工程都被改花了。

 2.回調方便

待續。。。

3.並行作業方便

待續。。。

 

爭議和缺點:

至於說分類將不同的功能分散到不同的檔案,我覺得這並不是優點,因為分類的相互覆蓋問題:如分類方法和本類方法衝突,本類的方法會被覆蓋,且如果同一個類的不同分類之間如果方法名有衝突,那就可以產生奇怪的問題(被別人覆蓋或是覆蓋被人),所以如果你的添加到分類的方法沒有執行或是功能和你實現的不一樣,很有可能是被別人的覆蓋了。至於分類不能添加變數,那就是沒有爭議的缺點了。

 

分類的使用慣例:

1. 擴充的類是系統內建的,使用分類。

2. 擴充的類是自訂的使用繼承。

當然這隻是習慣,沒有所謂的硬性規定,覺得那個順手就用那樣好了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.