В чем разница между классом и синглтоном в Objective-C? - PullRequest
2 голосов
/ 29 января 2012

Я читал несколько веток о различиях между синглетонами и классами на разных языках, но ни один (который я могу найти), специфичный для Objective-C.

Они кажутся мне очень похожими.

Я новичок в Objective-C - так в чем же различия или варианты использования между синглетонами и классами?

Ответы [ 5 ]

4 голосов
/ 29 января 2012

Вы программируете на 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. Оглянись немного.

2 голосов
/ 29 января 2012

На каждом языке программирования, о котором я слышал, синглтон - это шаблон проектирования , который диктует, что для данного класса существует только один экземпляр, тогда как в нормальный класс,можно создать много экземпляров.

РЕДАКТИРОВАТЬ:

Как уже упоминалось в комментариях, здесь является соответствующей цитатой из документации:

Одноэлементный класс возвращает один и тот же экземпляр независимо от того, сколько раз приложение его запрашивает.Типичный класс позволяет вызывающим объектам создавать столько экземпляров класса, сколько они хотят, тогда как с одноэлементным классом может быть только один экземпляр класса на процесс.Одноэлементный объект обеспечивает глобальную точку доступа к ресурсам своего класса.Синглтоны используются в ситуациях, когда эта единая точка управления желательна, например, в классах, предлагающих некоторые общие услуги или ресурсы

1 голос
/ 29 января 2012

Singleton - это шаблон проектирования, класс - это парадигма объектно-ориентированного программирования.Вы не можете действительно сравнить их.

0 голосов
/ 29 января 2012

Ну, класс - это структура определения. Думайте об этом как проект для стула или чего-то. Ваш стул - это Объект, а «чертежи» - это класс. Синглтон - это шаблон классов, так что это способ делать классы.

Синглтон имеет в основном указатель на экземпляр себя в классе. И у вас есть метод, чтобы получить этот экземпляр. Но вы не можете создать новый объект этого класса. Вы можете получить только один объект. Это похоже на глобальную переменную. У вас всегда есть доступ к этому одному объекту.

Я часто использую синглтон для языковых занятий, уроков перевода и т. Д.

EDIT

Никогда не делал много Objective-C, но это все еще объектно-ориентированное программирование, так что это будет один и тот же шаблон на любом языке.

Лично я бы пошел с Синглтоном, если вы хотите поделиться им между несколькими представлениями. У меня есть шаблон, который выглядит как синглтон, но для нескольких экземпляров. Для моего класса Locale в одном из моих проектов у меня есть более одного экземпляра Locale, но у меня есть один метод getInstance в моем классе Locale (конструктор является закрытым, поэтому я не могу инициализировать этот класс за его пределами). Поэтому я передаю желаемую локаль методу getInstance, и он проверяет закрытый массив, который содержит весь предыдущий экземпляр, если он не находится в массиве, а затем создает новый экземпляр этой локали и добавляет его в массив. Так что это то же самое, что и Singleton, но с массивом экземпляров, а не только с одним экземпляром.

0 голосов
/ 29 января 2012

Объектно-ориентированные концепции и шаблоны абстрагированы от технологий / языка, который вы используете для их реализации. Другими словами, значение Class одинаково во всех объектно-ориентированных языках, а Singleton - это шаблон, который может быть реализованным на любом объектно-ориентированном языке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...