OC中類目(Catagory)和擴展(Extension)的使用

一 . html

Objective-C中的類別(Category)主要有兩大功能,一個是將類的相關方法進行分組,另外一個是無需繼承便可向現有的類添加新的方法以擴展其功能。 網絡

例如,您所在的開發團隊須要建立一個類,每一個團隊成員負責類的某一部分功能,例如成員A負責編寫對象的建立與釋放的方法、成員B負責編寫網絡通訊的方法、成員C負責數據的家在與保存方法等。iOS SDK中大量使用了類別,這裏以NSArray類的外部接口聲明爲例(代碼中以...省略了其餘方法的接口聲明): spa

@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>
- (NSUInteger)count;
- (id)objectAtIndex:(NSUInteger)index;  
@end

@interface NSArray (NSExtendedArray)
- (NSArray *)arrayByAddingObject:(id)anObject;
- (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
- (NSString *)componentsJoinedByString:(NSString *)separator;
...
@end

@interface NSArray (NSArrayCreation)
+ (id)array;
+ (id)arrayWithObject:(id)anObject;
...
@end

@interface NSArray (NSDeprecated)
- (void)getObjects:(id __unsafe_unretained [])objects;
@end .net

注意類別的名字在小括號中,而且位於源類名以後。例如NSExtendedArray是類別名稱,它擴展了NSArray類。
二. code

類目的格式: component

接口部分: htm

@interface 已有類 (類別名) 對象

//方法的定義 blog

..... 繼承

@end

注意:類別中一般只定義新的方法。

實現部分:

@implmentation 已有類(類別名)

//方法的實現

@end

類別的實現部分能夠放在類的實現文件中,也能夠放在額外的實現文件中。

類目只能添加方法,不能添加實例變量。

三.

擴展的格式:

@interface 已有類 ()

//方法的定義

.....

@end

擴展能夠添加實例變量,屬性和方法。網上大多說擴展只能類內部用,我目前Xcode7.2,只有把擴展的接口文檔寫到.m裏纔是私有的,不然外部也是可用的。也就是說私有的方法寫在.m裏才能。

四。

若是不另外建立文件,直接在已有類裏添加類別和擴展。(要明確在同一個類文件裏是能夠聲明多個類的,對應的實現文件裏能夠實現多個類的對應屬性和方法)。直接敲@i後面的根據提示來就可。

也能夠另外建立文件,方法以下,不過對於擴展來講是實現必須在原來類的實現裏寫。由於擴展只生成.h文件。建立文件的步驟以下:首先command+N:

接着:

File是文件名,File Types有圖上給出的選項,能夠選擇。category和extension分別生成類目和擴展文件。生成文件後導航欄如圖:

首先是category:

extension如圖:

這個extension(延展)裏的屬性和方法外部可用,並不報錯。因此要想外部不可用,只能把延展寫在.m裏。

另外須要注意的是,類別的數量不受限制,一個類能夠有不少的類別。類別中定義的方法的優先級高於類中定義的方法,也就是說當你在類別中定義了一個與源類中的簽名徹底一致的方法時,類別中的方法會徹底覆蓋源類中的方法,你沒法調用源類中的方法。(未驗證過,摘抄的)

總結自:http://www.2cto.com/kf/201504/387630.html和http://blog.csdn.net/pucker/article/details/7387411

相關文章
相關標籤/搜索