官术网_书友最值得收藏!

4.7 分類

當我們的機器人士兵剛剛投入戰斗時,發生了一件很不愉快的事情,敵人將機器人士兵捕獲后重寫程序,并用于突襲自己人,造成了一些不必要的損失。現在,不可能將戰斗中的所有機器人都返回工廠修改程序了。所以,就制造了一個小小的輔助裝置,就像外掛一樣,我們將它稱為分類(category),使用分類可以不修改原類,也不使用繼承,而擴展原有類的功能。

現在,我們在機器人士兵上使用的分類就是一個自毀(self-destruct)裝置。

■4.7.1 命名分類

如果我們要創建一個類的命名分類,需要創建一組新的頭文件和模塊文件,而它們的命名,常用的方式是“主類名+分類名”。如我們創建CRobotSoldier的自爆功能分類,可以使用CRobotSoldierSelfDestruct作為文件名,下面就是分類的頭文件部分(CRobotSoldierSelfDestruct.h文件)。

    #ifndef __CRobotSoldierSelfDestruct_h__
    #define __CRobotSoldierSelfDestruct_h__
    #import <Foundation/Foundation.h>
    #import "CRobotSoldier.h"
    @interface CRobotSolder(SelfDestruct)
    -(void) selfDestruct;
    @end
    #endif

聲明命名分類時,我們在主類的后面使用一對圓括號指定分類名稱。接下來,需要在相應的分類模塊文件中實現分類中的成員(CRobotSoldierSelfDestruct.m文件)。

    #import "CRobotSoldierSelfDestruct.h"
    @implementation CRobotSolder(SelfDestruct)
    -(void) selfDestruct
    {
        NSLog(@"啟動自爆裝置");
    }
    @end

然后,我們可以通過下面的代碼使用分類中的新成員。

    #import <Foundation/Foundation.h>
    #import "CRobotSoldierSelfDestruct.h"
    int main(int argc, char *argv[])
    {
        @autorealeasepool {
            CRobotSoldier *killer = [[CRobotSoldier alloc] init];
            [killer selfDestruct];
        }
        return 0;
    }

請注意,在使用分類時,我們引用的是分類的頭文件,而對象定義的是主類(如CRobotSoldier)的對象。

此外,在分類中也可以定義與主類中同名的成員,但這樣一來,分類中的成員就會完全覆蓋主類中的成員,而且主類中的成員再無法訪問。除非你的目的就是這樣,否則需要小心使用。

■4.7.2 匿名分類

在創建分類時,我們還可以不指定分類名稱,此時,分類接口部分只需要在主類名稱后跟著空的一對圓括號()即可。不過,應注意匿名分類的實現部分,必須放在主類的實現代碼文件中,也就是說,要和主類的實現代碼在一起。

所以說,使用匿名分類的前提是,你可以修改主類的源代碼。

主站蜘蛛池模板: 廊坊市| 内江市| 五寨县| 庆安县| 谢通门县| 定陶县| 西林县| 乌鲁木齐县| 宣城市| 通山县| 曲松县| 府谷县| 得荣县| 定日县| 平邑县| 镇巴县| 赣榆县| 双城市| 镇宁| 稻城县| 江北区| 左云县| 义马市| 奉贤区| 平山县| 蕉岭县| 怀仁县| 乳山市| 古交市| 宁明县| 壤塘县| 星座| 康定县| 巴里| 湘西| 临清市| 贺州市| 贵州省| 炉霍县| 祁阳县| 高雄市|