2009-09-02 24 views
61

我想檢查一個對象的類型。我怎樣才能做到這一點?iPhone如何檢查一個對象的類型?

該場景是我得到一個對象。如果該對象是A類型,則執行一些操作。如果它是B型,那麼做一些操作。目前對象的類型是C,它是A和B的父親。

我有兩個類AViewControllerBViewController。我在UIViewController中收到的對象。現在如何檢查對象是AViewController還是BViewController

+0

的欺騙http://stackoverflow.com/questions/1144629/in目標-c-how-do-i-test-the-object-type – ennuikiller 2009-09-02 14:50:57

回答

152
if([some_object isKindOfClass:[A_Class_Name class]]) 
{ 
    // do somthing 
} 
+6

來自@Jasarien的帖子更具體。例如,比較一個對象是否是KindOfClass [UIView類]會返回你甚至所有的UIImageViews,UIImages,UIRoundRectButtons .....所以在這種情況下,「isMemberOfClass可能是更好的解決方案。 – 2013-06-20 09:08:43

44

NSObject上有一些方法可以讓你檢查類。

首先有-class這將返回您的對象的類。這將返回AViewController或BViewController。

然後有兩種方法,-isKindofClass:isMemberOfClass:

-isKindOfClass:將比較接收方和作爲參數傳入的類,並根據類是否是給定類的相同類型或子類來返回true或false。

-isMemberOfClass:會比較傳遞作爲參數的類接收器和返回true或基於類是否是嚴格相同的類的給定類假。在Objective-C

3

一個更常見的圖案是檢查對象響應你有興趣的方法的實施例:

if ([object respondsToSelector:@selector(length)]) { 
    // Do something 
} 

if ([object conformsToProtocol:@protocol(NSObject)]) { 
    // Do something 
} 
+0

這是真的,但在這種情況下不是很有幫助。提問者感興趣的兩個對象都是一個特定視圖控制器的子類,每個人可以實現相同的方法,但行爲不同,因此他/她需要知道他們正在處理哪個子類 – Jasarien 2009-09-02 15:20:00

+0

如果是這樣的話,你應該重構你的設計。isKindOfClass:肯定會起作用,但從長遠來看通常不會很好維護。 – rpetrich 2009-09-02 23:47:07