看着这两个方法好像都一样,但是咱仔细想想一个是判断是不是成员,另一个是判断是不是类。看看苹果是怎么说的:
isKindOfClass:
官方解释: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.
isMemberOfClass:官方解释:Returns a Boolean value that indicates whether the receiver is an instance of a given class.
翻译下就是isKindOfClass: 返回一个是否是你要给定类的一个实例或者是这个类继承的类的实例的一个布尔值
isMemberClass:返回一个是否是给定类的一个实例的一个布尔值
这样就很好理解了。看下边你会更好理解了:
使用:
这里有两个类,分别是继承于NSObject的Car,Car的BMW.
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
NSString *name;
}
-(void)setName:(NSString*)n;
@end
#import "Car.h"
@implementation Car
-(void)setName:(NSString *)n
{
name = n;
}
@end
#import "Car.h"
@interface BMW : Car
-(void)drive;
@end
#import "BMW.h"
@implementation BMW
-(void)drive
{
NSLog(@"我喜欢BMW");
}
@end
使用isKindOfClass的例子:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Car *car = [[Car alloc] init];
BMW *bmw = [[BMW alloc] init];
//YES
if ([bmw isKindOfClass:[BMW class]]) {
NSLog(@"bmw 是 BMW类或BMW的子类");
}
//YES
if ([bmw isKindOfClass:[Car class]]) {
NSLog(@"bmw 是 Car类或Car的子类");
}
//YES
if ([bmw isKindOfClass:[NSObject class]]) {
NSLog(@"bmw 是 NSObject类或NSObject的子类");
}
[car release];
[bmw release];
[pool release];
输出结果:
2016-07-10 14:34:17.315 ObjectiveCTest[2595:f803] bmw 是 BMW类或BMW的子类
2016-07-10 14:34:17.316 ObjectiveCTest[2595:f803] bmw 是 Car类或Car的子类
2016-07-10 14:34:17.316 ObjectiveCTest[2595:f803] bmw 是 NSObject类或NSObject的子类
使用isMemberOfClass的例子:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Car *car = [[Car alloc] init];
BMW *bmw = [[BMW alloc] init];
//YES
if ([bmw isMemberOfClass:[BMW class]]) {
NSLog(@"bmw BMW类的成员");
}
//NO
if ([bmw isMemberOfClass:[Car class]]) {
NSLog(@"bmw Car类的成员");
}
//NO
if ([bmw isMemberOfClass:[NSObject class]]) {
NSLog(@"bmw NSObject类的成员");
}
[car release];
[bmw release];
[pool release];
输出结果:
2016-07-10 14:23:07.965 ObjectiveCTest[2460:f803] bmw BMW类的成员
Hope To Help You!