我如何testing一个对象在Objective-C中的哪个类?

如何testing对象是否是Objective-C中特定类的实例? 比方说,我想看看对象a是B类还是C类的实例,我该如何去做呢?

testing对象是否是类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上

如果你想检查一个特定的类,那么你可以使用

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

Apple文档中的KindOfClass的含义是什么?

在类集群表示的对象上使用此方法时要小心。 由于类集群的性质,返回的对象可能并不总是您所期望的types。 如果您调用返回类集群的方法,那么该方法返回的确切types就是您可以对该对象执行的最佳指示。 例如,如果某个方法返回一个指向NSArray对象的指针,则不应使用此方法查看该数组是否可变,如下面的代码所示:

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

如果你在代码中使用这样的结构,你可能会认为修改一个实际上不应该被修改的对象是可以的。 这样做可能会造成其他代码的问题,预期对象保持不变。

如果你想得到这个类的名字,只需要调用:

 id yourObject= [AnotherClass returningObject]; NSString *className=[yourObject className]; NSLog(@"Class name is : %@",className); 

你也可以检查运行时间。 把一个断点放在代码里面(lldb)控制台写入

 (lldb) po [yourObject class] 

喜欢这个..

在这里输入图像说明