我的对象是使用意外答案执行的isKindOfClass

时间:2015-03-18 05:10:56

标签: objective-c iphone class

我一直试图让这个脚本打印出插入的两种对象之一。但是,它总是打印两种类型,而只插入一个东西。有两个类,VKJItem和VKJBox。 VKJBox是VKJItem的子类。

这是main.m:

VKJBox *box1 = [[VKJBox alloc] init];
VKJBox *box2 = [[VKJBox alloc] init];
[box1 addItem:box2];

这是我的VKJBox的addItem方法的实现:

if ([item isKindOfClass:[VKJBox class]]) {
    NSLog(@"BOX");
}

if ([item isKindOfClass:[VKJItem class]]) {
    NSLog(@"ITEM");
}

问题是脚本会将BOX和ITEM打印到控制台。

2 个答案:

答案 0 :(得分:2)

VKJBox是VKJItem的子类,因此VKJBox是一种 VKJItem,是一种 VKJBox。

-isKindOfClass:用于确定对象是类的实例还是从类继承的类的实例。

例如:

对于UIImageView,UILabel等,

isKindOfClass [UIView类]将为true。

使用 -isMemberOfClass:来检查对象是否是指定类的实例。

答案 1 :(得分:0)

您的类必须是其他的子类。

isKindClass:

返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例。

isMemberOfClass:

返回一个布尔值,指示接收者是否是给定类的实例。

您需要使用isMemberOfClass

Source