2013-08-23 4 views
5

Компания, в которой я работаю, имеет ОГРОМНЫЙ класс (Globals.m), который является синглом. Он хранит в основном кучу BOOL, которые должны входить в NSUserDefaults, но есть также указатели на такие вещи, как видеоплакаты, принадлежащие различным диспетчерам просмотра. Я довольно новичок в разработке iOS (и я сдержанный стажёр), но я знаю, что код пахнет до небес. Как я могу объяснить, почему использование одного синглета для хранения всех переменных является плохим?Почему использование плохой практики класса Global Variables (singleton)?

Редактировать: Я не имею в виду, что синглтоны плохи, я имею в виду только в этом случае. По сути, каждая значимая переменная в приложении хранится в этом одном экземпляре.

+1

Узор - это всего лишь образец ... Что действительно плохо, так это слепо сказать, что что-то плохо, потому что вы думаете, что это ... Синглтоны неплохие, но вы можете, конечно, использовать/создавать плохие синглтоны ... Это зависит от того, как вы их проектируете/используете ... – Macmade

+0

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

+0

Спасибо @JoshCaswell, я видел, что раньше , но я не вполне следовал всем его пунктам. Извините за повторение! – Febble

ответ

3

Многие объекты в UIKit являются одноточиями. Объект UIApplication является одноэлементным. У NSUserDefaults есть синглтон standardUserDefaults. UIDevice currentDevice возвращает синглтон.

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

Я использую singleton для хранения структур объекта non-CoreData. Я также определяю некоторые вспомогательные методы для получения каталога библиотеки, данных кодирования и архивирования с ключами. Поэтому я могу ссылаться на объект главного массива везде, где он мне нужен, или легко получить доступ к методам, которые в противном случае были бы просто копией и пастами.

+0

Итак, если все они используют это для переменных, тогда нет никакого вреда? – Febble

+0

Я бы сказал, что если вы получаете прямой доступ и изменение объектов вашего синглтона в коде View Controller, вместо того, чтобы назначать эти объекты в качестве свойств класса View Controller, тогда это плохо. т.е. '-viewDidLoad {[[[Singleton shared] array] addObject: newObject]; } 'будет плохой, а также задает свойство для массива в вашем контроллере просмотра и изменяет его там. – Justin

0

Globals.m звучит не совсем как одноэлементный, и, если это так, похоже, что он используется только для целей конфигурации? Тогда файл, полный #defines или extern, сделает то же самое, я думаю. Без каких-либо подробностей трудно понять, что вы ищете.

+0

Он настроен как одноэлементный и явно имеет комментарий, который ссылается на него как на одноэлемент. И он активно используется для хранения любой переменной, которая имеет доступ к другим классам, а не только для конфигурации. Помимо пользовательского интерфейса, на самом деле не ссылайтесь друг на друга. Все делается через NSNotificationCenter и этот экземпляр Globals. Очень возможно, что я просто подскочил к выводу, что это плохая практика, как я уже сказал, я не очень опытен. – Febble

Смежные вопросы