iOS 中分類(Categories) 和 繼承(Inherit)有相同的功能,但在一些細節上又有差異,簡單介紹一下兩者的異同。
分類可以在不知道系統類源代碼的情況下,為這個類添加新的方法。分類只能用來添加方法,不能添加成員變量。通過分類增加的方法,系統會認為是該類類型的一部分。比如:
1 #import <UIKit/UIKit.h> 2 3 @interface UIImage (WB) 4 5 /** 6 * 返回一張自由拉伸的圖片 7 */ 8 + (UIImage *)resizedImageWithName:(NSString *)name; 9 10 11 @end
UIImage 是系統的類,在不知道UIImage類源代碼的情況下,仍然可以通過分類為該類添加新的方法。而且該方法成為了該類型的一部分。若有其他的類繼承自UIImage類,則UIImage類的子類全部都擁有 resizedImageWithName 這個方法。
從這個角度來說,繼承和分類一個較大的區別是:子類繼承自父類,子類中增加的方法不會成為父類的一部分。即:假設類A繼承自 UIImage,在類A中增加了一個 resizedImage 的函數,父類UIImage並不能使用該函數,當有新的類,比如說類B繼承自 UIImage時,類B中沒有 resizedImage函數。
但是繼承既能夠添加方法,也能夠添加成員變量。當然,所添加的成員變量,也僅限於在子類中使用。