- Objective-C和Sprite Kit游戲開發從入門到精通
- 曹化宇
- 689字
- 2021-01-07 18:57:43
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 匿名分類
在創建分類時,我們還可以不指定分類名稱,此時,分類接口部分只需要在主類名稱后跟著空的一對圓括號()即可。不過,應注意匿名分類的實現部分,必須放在主類的實現代碼文件中,也就是說,要和主類的實現代碼在一起。
所以說,使用匿名分類的前提是,你可以修改主類的源代碼。