Экземпляр NSString сообщает свой класс как NSCFString
Моя цель здесь очень проста - я пытаюсь установить NSString
для некоторых тестовых данных, а затем вернуть класс, который должен быть NSString
, Вот мой код:
NSString* stringer = [NSString stringWithFormat: @"Test"];
NSLog(@"%@", [stringer class]);
В журнале написано, что класс NSCFString
не NSString
, Что тут происходит?
2 ответа
NSString действительно контейнерный класс для различных типов строковых объектов. Обычно конструктор NSString возвращает объект, который на самом деле имеет тип NSCFString, который является тонкой оболочкой для структуры Core Foundation CFString.
NSString является кластером классов, наряду с другими типами Foundation, такими как NSNumber и NSArray:
Кластеры классов - это шаблон проектирования, который среда Foundation широко использует. Кластеры классов группируют ряд частных, конкретных подклассов в общем абстрактном суперклассе. Таким образом, группирование классов упрощает общедоступную архитектуру объектно-ориентированной среды, не уменьшая ее функциональных возможностей. Кластеры классов основаны на шаблоне проектирования Абстрактной фабрики, который обсуждается в разделе "Шаблоны проектирования Какао".