2010-09-06 75 views

回答

238

isKindOfClass:如果接收方是指定类的实例或从指定类继承的任何类的实例,则返回YES。

isMemberOfClass:如果接收方是指定类的实例,则返回YES。

大多数情况下,您想使用isKindOfClass:来确保您的代码也适用于子类。

NSObject Protocol Reference对这些方法进行了一些讨论。

+0

能否请你清楚我下面疑惑?如果([lbl.textColor isMemberOfClass:[UIColor class]]){// Not Memeber NSLog(@“Not Memeber”);其他{ } NSLog(@“Not Memeber”); } if([imgView.image isMemberOfClass:[UIImage class]]){// Memeber NSLog(@“Memeber”);其他{ } NSLog(@“Not Memeber”); } – Nikkie 2014-12-19 14:39:04

44

假设

@interface A : NSObject 
@end 

@interface B : A 
@end 

... 

id b = [[B alloc] init]; 

然后

[b isKindOfClass:[A class]] == YES; 
[b isMemberOfClass:[A class]] == NO; 

基本上,-isMemberOfClass:为真,如果实例是完全指定的类的,而-isKindOfClass:为真,如果实例是完全指定的类,或者如果其中一个实例的祖先是指定的类。

-isMemberOfClass:很少使用。

+1

但是,如果你有一个包含UIViews和UISegmentedControl的子视图数组,并且你通过它们遍历并设置了一个条件类,你将需要使用isMemberOfClas UIView和isMemberOfClass UISegmentedControl来区分它们,不是吗? isKindOfClass会将UISegmentedControl视为UIView。 – PruitIgoe 2013-08-01 18:36:09

+0

@Pruitlgoe这是非常真实的。你可以使用isKindOfClass:[UIView class]来确保你处理的所有对象都是UIViews,但是你需要在一些条件语句中使用isMemberOfClass:[UIView class]和/或isMemberOfClass:[UISegmentedControl class]来指示任何不同的实现根据他们的立即类实例 – 2014-07-02 13:48:38

73
  • isKindOfClass:指示对象是否从一个给定的类
  • isMemberOfClass:继承指示对象是否一个给定的类的实例。

[[NSMutableData data] isKindOfClass:[NSData class]]; // YES 
[[NSMutableData data] isMemberOfClass:[NSData class]]; // NO 
+0

@Durga,如果这回答你的问题,你应该接受它。阅读更多关于接受率的信息:http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – poncha 2013-01-18 15:25:41

9

isKindOfClass:返回一个布尔值,它指示 接收机是否是给定的类的一个实例或从该类继承的任何类 的一个实例。

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

3

isKindOfClass->当对象是该类的实例或从其继承的类的实例时返回YES。

isMemberOfClass:return当对象是该类的实例时返回YES,但如果是:从其继承的类的实例。

这个例子在jtbandes的答案中已经足够了。

0

由于类集群,isMemberOfClass可以给你一个你可能不会期待的答案。在许多情况下,你的最佳选择更可能是 - (BOOL)conformsToProtocol:(SEL)aSelector或 - (BOOL)conformsToProtocol:(Protocol *)aProtocol。也就是说,如果能够回答你的需求而不是测试类/子类,那么测试它们会更好。

看到苹果文档的NSObject类和协议:

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/cl/NSObject

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intf/NSObject