2009-07-11 2 views
13

다음 코드 :을 NSData에 반대NSConcreteData 란 무엇이며 어디에 정의되어 있습니까?

[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mapURL]] 

는 NSConcreteData의 인스턴스를 반환 (내가 기대!). NSConcreteData는 정확히 무엇을 나타내며 NSData 인스턴스 대신 반환되는 이유는 무엇입니까? 또한이 클래스는 어디에 정의되어 있습니까? XCode는 정의되지 않았다고 불평하지만 클래스를 가져 오기 위해 내가 무엇을 포함해야하는지 모른다.

도움을 주셨습니다.

답변

19

Foundation 프레임 워크는 특정 영역에서 클래스 클러스터를 사용하여 다양한 클래스에 공통 인터페이스를 제공합니다. 이것이 의미하는 바는 NSData API를 사용하여 NSData 개체를 만들 때 인스턴스화되고 반환되는 실제 클래스는 NSData과 다르지만 코드에 따라 NSData 개체로 처리되고 참조 될 수 있으며 처리되어야합니다.

하루가 끝날 때 간단한 대답은 NSConcreteData의 존재를 무시하고 NSData처럼 취급하십시오.

클래스 클러스터에 대한 자세한 내용은 Apple Cocoa Fundamentals Guide의 클래스 클러스터 섹션을 참조하십시오. [[있는 NSData 클래스] 서브 isMemberOfClass] 대신 의 : 하위 인 경우 [하위 isKindOfClass [을 NSData 클래스] 후자는 true를 반환

+4

나는 에 체크로 내 문제의 뿌리를 발견 NSData에서 파생 된 클래스의 인스턴스입니다. 건배! – Codebeef

+2

참고로, NSContreteData를 NSData로 취급 할 수는 없습니다 (예 : JSON을 직렬화하려는 경우). 그것은 예외를 던질 것입니다 : 잡히지 않은 예외 'NSInvalidArgumentException'으로 인해 응용 프로그램을 종료합니다, 이유 : 'JSON 쓰기 형식이 잘못되었습니다 (NSConcreteData)' – Tim

관련 문제