什么是NSConcreteData,它在哪里定义?

Cod*_*eef 13 iphone cocoa-touch nsdata

以下代码:

[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mapURL]]
Run Code Online (Sandbox Code Playgroud)

返回NSConcreteData的一个实例,而不是NSData(我期望!).NSConcreteData表示什么,确切地说,以及为什么返回它而不是NSData的实例?此外,这个类定义在哪里?XCode抱怨它尚未定义,但我不知道为了获得课程我应该包括什么.

任何帮助赞赏!

Fra*_*irs 19

Foundation框架在某些区域使用类集群为各种类提供通用接口.这意味着,当您使用NSDataAPI创建NSData对象时,实例化和返回的实际类与您的代码不同NSData,但可以并且应该被处理并称为NSData对象.

在一天结束时,简单的答案是:忽略它的存在NSConcreteData并对待它NSData.

有关类集群的更多信息,请参阅Apple的Cocoa基础指南的Class Clusters部分.

  • 我发现我的问题的根源是检查[sub isMemberOfClass:[NSData class]]而不是[sub isKindOfClass:[NSData class]]如果sub是从NSData派生的类的实例,后者返回true,而前者不会.干杯! (4认同)
  • 只是注意,您不能总是将NSContreteData视为NSData,例如:尝试序列化JSON时.它将引发异常:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'JSON写入中的无效类型(NSConcreteData)' (2认同)