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

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 匿名分類

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

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

主站蜘蛛池模板: 京山县| 东乡| 阿尔山市| 丹寨县| 台湾省| 黔南| 铜川市| 遂平县| 孝感市| 邯郸市| 布拖县| 云和县| 苗栗市| 海安县| 浦江县| 柳州市| 玉门市| 绥化市| 壤塘县| 高雄县| 图们市| 枣阳市| 南华县| 特克斯县| 昌邑市| 罗田县| 汉沽区| 本溪市| 二手房| 隆安县| 荣成市| 丹江口市| 监利县| 太仓市| 延吉市| 明水县| 巴林右旗| 乡宁县| 扬中市| 五台县| 溧阳市|