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

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

나는 항상 "아니오!" 콘솔에서. 나는 Array, NSNumber, NSString을 시도했다. 그들 모두는 작동하지 않는 것 같습니다. 이상하다. 내가 docs에서 얻을 때,이 메소드는 테스트 대상 객체의 클래스를 다시 테스트 할 때 YES를 리턴해야한다. Core Foundation이 아닌 Foundation.h를 사용하고 있습니다 (어쨌든 차이가있는 경우).왜 -isMemberOfClass가 작동하지 않습니까?

+0

일반적으로 -isMemberOfClass :는 절대로 원하는 방법이 아닙니다. 실제로 유용한 몇 가지 특수 상황이 있습니다. 항상 -isKindOfClass :를 대신 사용하십시오. –

답변

9

isKindOfClass: 또는 respondsToSelector:NSArray으로 사용하고 비슷하게 class clusters을 사용해야합니다. 실제로는 하위 클래스를 생성합니다. 이것에 대한 약간의 흥미로운 점은 this answer을 참조하십시오.

+0

@ gf, "클래스 클러스터"란 무엇입니까? –

+0

사과 설명서를 참조하십시오. http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW34 –

1

isMemberOfClass 대신 isKindOfClass를 시도 했습니까?

3

[NSMutableArray arrayWithCapacity:]을 사용하여 배열을 만들면 실제로 가져 오는 객체는 실제로 NSMutableArray의 일부 구체적인 하위 클래스의 멤버입니다. NSMutableArray는 구체적인 인스턴스를 생성하는 과정에서 잠시 존재합니다.

-isMemberOfClass:은 수신기의 isa 포인터가 주어진 클래스와 같으면 true를 반환합니다. -isKindOfClass:은 수신자가 지정된 클래스 또는 해당 하위 클래스의 멤버이면 true를 반환합니다.

관련 문제