Вы программируете на Objective-C, объектно-ориентированном языке программирования (ООП). Итак, чтобы узнать, что такое класс, вы должны сначала понять концепции ООП.
Я не буду вдаваться в то, почему ООП языки были разработаны в отличие от процедурных языков. Вы можете Google "процедурные против объективно ориентированных преимуществ".
Во всяком случае,
Языки объектно-ориентированного программирования (ООП) предоставляют механизмы / устройства / структуры, которые помогают вам реализовать принципы ООП. 3 основных принципа: (1) Инкапсуляция (2) Наследование (3) Полиморфизм . Снова Google, чтобы узнать, что это такое.
Теперь Класс : будет одним из тех механизмов / устройств / структур, который реализует 3 принципа ООП. Это план / дизайн / структура того, каким должен быть объект .
Обычно (но не всегда) класс имеет (1) переменные, объявленные внутри него (строки, int, массивы, что угодно) и (2) методы / функции, которые выполняют задачу над этими объявленными переменными внутри него. Когда вы создаете / выделяете / создаете тот класс в памяти, этот класс становится «живым». Чертежи теперь становятся объектом (объектом, реализующим принципы ООП, которые вы должны гуглить).
Теперь Singleton - это шаблон проектирования. Если вы выходец из процедурной языковой среды, существует множество шаблонов программирования, которые могут вам понадобиться. Синглтон - это шаблон / особенный способ, которым вы проектируете что-то. Поэтому, когда вы говорите одноэлементный класс, это особый способ проектирования этого класса. И что это за особый дизайн? Ну, обычно, когда вы создаете / выделяете / создаете класс в памяти, вы можете делать это много раз, создавая несколько экземпляров объектов этого класса. Однако, если вы примените одноэлементный шаблон проектирования к классу, вы сможете создать только один экземпляр (и ТОЛЬКО один).
В Objective-C, если я сделаю что-то вроде этого:
myClass *anObjectOfMyClass1 = [[myClass alloc] init];
// This (above) would create an object from the blueprint *myClass* and assign it to *anObjectOfMyClass1*
myClass *anObjectOfMyClass2 = [[myClass alloc] init];
// This would create an object from the blueprint *myClass* and assign it to *anObjectOfMyClass2*
// Note: anObjectOfMyClass1 and anObjectOfMyClass2 would contain two different objects of the same type
// If *myClass* was designed using singleton pattern however, anObjectOfMyClass1 and anObjectOfMyClass2 would typically contain the same object.
Короче говоря ... вы действительно не можете сравнить их.
Что касается использования синглетонов .. Я бы сказал, Логгеры. Я думаю, что уже есть ответы на вопросы об использовании синглетонов в stackoverflow. Оглянись немного.