我如何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]
喜欢这个..