2009-12-04 43 views
4
NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3]; 

if ([arr isMemberOfClass:[NSMutableArray class]]) { 
    NSLog(@"YEP!!"); 
} else { 
    NSLog(@"NO!!"); 
} 

我總是得到「NO !!」在控制檯中。我試着用Array,NSNumber,NSString。他們都似乎沒有工作。真奇怪。當我從文檔中獲得它時,如果我再次測試作爲測試對象的對象的類,此方法應該返回YES。我使用的是Foundation.h,而不是Core Foundation(如果它有任何區別)。-isMemberOfClass爲什麼不能在這裏工作?

+0

作爲一般規則-isMemberOfClass:永遠不是你想要的方法。只有幾個非常特殊的情況,它確實有用。總是使用-isKindOfClass:來代替。 – 2009-12-04 11:39:57

回答

9

您需要使用isKindOfClass:respondsToSelector:作爲NSArray和類似的是class clusters - 創建它們時實際上會獲得子類。請參閱this answer瞭解一些有趣的內容。

+0

@gf,什麼是「類集羣」? – 2009-12-04 00:46:08

+0

查看蘋果文檔:http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34 – 2009-12-04 01:28:02

1

你嘗試過isKindOfClass而不是isMemberOfClass嗎?

3

當您使用[NSMutableArray arrayWithCapacity:]創建數組時,您獲得的對象實際上是NSMutableArray的某個具體子類的成員。 NSMutableArray只在創建具體實例的過程中暫時存在。

-isMemberOfClass:如果接收者的isa指針等於給定的類,則返回true。 -isKindOfClass:如果接收方是給定類或其任何子類的成員,則返回true。