Экземпляр NSString сообщает о своем классе как NSCFString

Моя цель здесь очень проста — я пытаюсь установить NSString для некоторых тестовых данных, а затем вернуть класс, который должен быть NSString. Вот мой код:

NSString* stringer = [NSString stringWithFormat: @"Test"];
NSLog(@"%@", [stringer class]);

В журнале написано, что класс NSCFString, а не NSString. Что тут происходит?


person bloudermilk    schedule 26.12.2008    source источник


Ответы (2)


NSString на самом деле является классом-контейнером для различных типов строковых объектов. Как правило, конструктор NSString действительно возвращает объект, который на самом деле имеет тип NSCFString, который является тонкой оболочкой вокруг структуры Core Foundation CFString.

person mipadi    schedule 26.12.2008

NSString — это кластер классов вместе с другими типами Foundation. такие как NSNumber и NSArray:

Кластеры классов — это шаблон проектирования, широко используемый инфраструктурой Foundation. Кластеры классов группируют ряд частных конкретных подклассов в общедоступном абстрактном суперклассе. Такое группирование классов упрощает общедоступную архитектуру объектно-ориентированного фреймворка, не уменьшая его функциональное богатство. Кластеры классов основаны на шаблоне проектирования «Абстрактная фабрика», описанном в разделе «Шаблоны проектирования какао».

person Marc Charbonneau    schedule 26.12.2008
comment
Почему Apple не применила этот подход для NSOrderedSet? NSOrderedSet ведет себя точно так же, как NSArray на уровне интерфейса, но для него сделали независимый класс. - person Robert; 09.07.2012