簡體   English   中英

如何在Objective-C中測試對象是哪個類?

[英]How do I test which class an object is in Objective-C?

如何在Objective-C中測試對象是否是特定類的實例? 假設我想看看對象a是b類的實例,還是類c,我該怎么做呢?

要測試object是否是類a的實例:

[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of 
// given class or an instance of any class that inherits from that class.

要么

[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a 
// given class.

要獲取對象的類名,可以使用NSStringFromClass函數:

NSString *className = NSStringFromClass([yourObject class]);

或來自objective-c運行時api的c函數:

#import <objc/runtime.h>

/* ... */

const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);

編輯:在斯威夫特

if touch.view is UIPickerView {
    // touch.view is of type UIPickerView
}

你也可以使用

NSString *className = [[myObject class] description]; 

在任何NSObject上

Apple文檔中isKindOfClass的含義是什么?

在類集群表示的對象上使用此方法時要小心。 由於類集群的性質,您獲得的對象可能並不總是您期望的類型。 如果調用返回類集群的方法,則該方法返回的確切類型是您可以對該對象執行的操作的最佳指示。 例如,如果方法返回指向NSArray對象的指針,則不應使用此方法來查看該數組是否可變,如以下代碼所示:

// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object
}

如果在代碼中使用此類構造,您可能認為修改實際上不應修改的對象是可以的。 這樣做可能會為期望對象保持不變的其他代碼產生問題。

如果您想檢查特定的課程,那么您可以使用

if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}

如果你想獲得班級的名稱,只需致電: -

id yourObject= [AnotherClass returningObject];

NSString *className=[yourObject className];

NSLog(@"Class name is : %@",className);

您還可以檢查運行時間。 在代碼和內部(lldb)控制台寫入一個斷點

(lldb) po [yourObject class]

像這樣..

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM