2010-09-06 77 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

相關問題