Objective-C中的'isa'变量是否等于Java中的'instanceof'

2ba*_*ard 10 java objective-c ios

简单的问题:可以公平地说,Objective-C中的'isa'实例变量提供与Java中'instanceof'运算符相同的功能吗?

Jac*_*kin 14

这些是不同的概念.

一个是结构的成员,而另一个是运算符.

要模仿instanceofJava 中对运算符的严格解释,可以对isa成员进行指针比较:

if(obj->isa == [SomeClass class]) {
  //obj is an instance of SomeClass
}
Run Code Online (Sandbox Code Playgroud)

但建议您使用NSObject协议的-isMemberOfClass:方法来完成此任务:

if([obj isMemberOfClass:[SomeClass class]]) {
  //obj is an instance of SomeClass
}
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣知道指定的类是否是另一个类的实例,或者是另一个类的子类,则应该使用NSObject协议的-isKindOfClass:方法.