Что такое NSConcreteData и где оно определено?

Следующий код:

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

возвращает экземпляр NSConcreteData в отличие от NSData (который я ожидал!). Что представляет собой NSConcreteData, и почему оно возвращается вместо экземпляра NSData? Далее, где этот класс определен? XCode жалуется, что он не был определен, но я не знаю, что я должен включить, чтобы получить класс.

Любая помощь оценивается!

Ответы

Ответ 1

Фундаментальная структура использует кластеры классов в определенных областях, чтобы обеспечить общий интерфейс для различных классов. Это означает, что, когда вы используете API NSData для создания объекта NSData, фактический класс, который был создан и возвращен, отличается от NSData, но может и должен рассматриваться и упоминаться как NSData по вашему коду.

В конце дня простой ответ: игнорировать существование NSConcreteData и рассматривать его как NSData.

Дополнительные сведения о кластерах классов см. в разделе Кластерные классы в Apple Cocoa Руководство по основам.