如何测试对象是否是Objective-C中特定类的实例?假设我想知道对象a是否是类b或类c的实例,我该怎么做呢?
测试对象是否是类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.
or
[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 runtime api中的c函数:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
编辑:在Swift
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
在苹果文档中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);
推荐文章
- 新的自动引用计数机制是如何工作的?
- 如何测试对象在Objective-C中的类?
- 是否有可能禁用浮动头在UITableView与UITableViewStylePlain?
- 从Cocoa应用程序执行一个终端命令
- Swift编译器错误:“框架模块内的非模块化头”
- 从父iOS访问容器视图控制器
- 自定义dealloc和ARC (Objective-C)
- 调整UITableView的大小以适应内容
- 在代码中为UIButton设置一个图像
- UICollectionView中的单元格间距
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何使用UIVisualEffectView来模糊图像?
- 如何改变时间和时区在iPhone模拟器?
- 我如何知道何时UITableView完成了ReloadData?
- 复制文本到剪贴板与iOS