The following code:
[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mapURL]]
returns an instance of NSConcreteData as opposed to NSData (which I expected!). What does NSConcreteData represent, exactly, and why is it being returned instead of an instance of NSData? Further, where is this class defined? XCode is complaining that it hasn't been defined, but I don't know what I should include in order to get the class.
Any help appreciated!
The Foundation framework uses class clusters in certain areas to provide a common interface to various classes. What this means is that, when you use an
NSData
API to create anNSData
object, the actual class that is instantiated and returned is different fromNSData
, but can and should be treated and referred to as anNSData
object by your code.At the end of the day, the simple answer is: ignore the existence of
NSConcreteData
and treat it likeNSData
.For more information on class clusters, please see the Class Clusters section of Apple's Cocoa Fundamentals Guide.