- Objective-C和Sprite Kit游戲開發(fā)從入門到精通
- 曹化宇
- 869字
- 2021-01-07 18:57:44
4.9 動態(tài)處理類和對象
使用各種各樣的機(jī)器人對象時,可能需要判斷它們的功能,這時,就需要動態(tài)判斷對象或類是否支持所需要的方法,這些操作都可以通過NSObject類中定義的一系列方法來實(shí)現(xiàn),由于我們創(chuàng)建的類最終都會以NSObject類為終級父類,所以,我們可以在所有類中使用這些方法。
接下來,我們就討論一些常用的方法。
■4.9.1 對象類型判斷
本節(jié)將介紹對象類型判斷相關(guān)的方法。
1.對象是否為某類的實(shí)例
需要判斷一個對象是不是某個類的實(shí)例時,可以使用如下方法。
-(BOOL) isMemberOfClass:classObject;
我們可以看到,isMemberOfClass:定義為一個實(shí)例方法,其中,參數(shù)classObject為類對象,可以使用class類方法獲取,如“[CRobot class]”。
下面的代碼將判斷一個對象是不是CRobot類的實(shí)例(對象)。
CRobot *robot5 = [[CRobot alloc] init]; BOOL result = [robot5 isMemberOfClass:[CRobot class]];
2.對象是否為某類或其父類的實(shí)例
判斷一個對象是不是某個類或其父類的實(shí)例,可以使用isKindOfClass:方法,它同樣定義為實(shí)例方法,其定義如下。
-(BOOL) isKindOfClass:classObject;
下面的代碼演示了isKindOfClass:方法的使用。
CRobotSoldier *killer = [[CRobotSoldier alloc] init]; BOOL result = [killer isKindOfClass:[CRobot class]];
由于CRobotSoldier是CRobot的子類,所以,result的值也是YES。
3.判斷類的繼承關(guān)系
類方法isSubclassOfClass可以判斷一個類是不是某個類的子類。
+(BOOL) isSubclassOfClass:classObject;
下面的代碼,會判斷CRobotSoldier類是否為CRobot類的子類。
BOOL result = [CRobotSoldier isSubclassOfClass:[CRobot class]];
■4.9.2 方法存在判斷
在類中定義的方法分為實(shí)例方法和類方法,我們分別使用如下兩個方法進(jìn)行判斷類或?qū)ο笾惺遣皇强梢允褂弥付ǖ姆椒ā?/p>
判斷實(shí)例方法是否存在,我們使用respondsToSelector方法,其定義如下。
-(BOOL) respondsToSelector:selector;
其中的參數(shù)selector為SEL類型(選擇器類型),我們使用@selector(<方法名>)獲取沒有參數(shù)的方法的SEL類型對象。
下面的代碼會判斷CRobot類型的對象中是否可以使用work方法。
CRobot *robot5 = [[CRobot alloc] init]; BOOL result = [robot5 respondsToSelector:@selector(work)];
如果我們需要判斷的方法包含參數(shù),那么,在@selector()指令中只需要包括方法名、參數(shù)名稱和冒號即可,并不需要指定參數(shù)變量。
判斷一個類是否包含類方法時,可以使用如下方法。
+(BOOL) instancesRespondToSelector:selector;
其使用與respondsToSelector:方法類似。
■4.9.3 動態(tài)調(diào)用方法
如果我們需要動態(tài)調(diào)用方法,可以使用如下三個實(shí)例方法,分別用于調(diào)用無參數(shù)、一個參數(shù)和兩個參數(shù)的方法。
-(id) performSelector:selector; -(id) performSelector:selector withObject:object; -(id) performSelector:selector withObject:object1 withObject:object2;
這幾個方法都會返回id類型的數(shù)據(jù),它們是所調(diào)用方法的返回結(jié)果。
下面的代碼就調(diào)用了CRobot對象中的move方法,此方法沒有返回值,所以,我們也不需要處理performSelector:方法的返回值。
CRobot *robot5 = [[CRobot alloc] init]; robot5.name = @"No.5"; [robot5 performSelector:@selector(move)];
- Word/Excel/PPT 2007入門與提高(超值版)
- 新手易學(xué):電腦辦公
- Office 2016三合一職場辦公效率手冊
- 這樣用就對啦!Word/Excel/PPT 2013商務(wù)辦公實(shí)戰(zhàn)
- WPS Office商務(wù)辦公從新手到高手
- Project 2010企業(yè)項(xiàng)目管理實(shí)踐
- Office 2007辦公軟件應(yīng)用立體化教程
- Final Cut Pro X基礎(chǔ)培訓(xùn)教程
- 微軟辦公軟件國際認(rèn)證(MOS)Office 2010大師級通關(guān)教程(第2版)
- 中文PowerPoint 2003應(yīng)用基礎(chǔ)
- Word/Excel/PowerPoint三合一辦公應(yīng)用
- PPT制作應(yīng)用大全
- Word 2007辦公應(yīng)用融會貫通
- Office辦公軟件案例教程(第4版)
- 金融精英Word實(shí)操手冊:世界知名公司這樣制作研究報告