iphone / target-c: использование синглтон-класса в качестве контейнера для глобалов - PullRequest
2 голосов
/ 17 января 2010

Итак, я обнаружил, что использую одноэлементный класс User для доступа к глобальным переменным в приложении iphone. В некоторых случаях я использую экземпляр почти во всех методах класса. Итак, в первых нескольких строках каждого метода у меня есть такое утверждение:

User *user = [User sharedManager];

Это явно не СУХАЯ реализация. Мой вопрос: вместо того, чтобы повторять это утверждение во всех методах, которые мне нужны для доступа, Пользователь не может просто создать его один раз, скажем, в инициализаторе, а затем установить свойство, равное этому указателю, например:

-(id)init {
.....
self.sharedUser = [User sharedManager];
....
}

и затем ссылаться на это свойство в каждом методе вместо создания экземпляра singleton?

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Конечно, вы можете сделать это. Могут быть (небольшие) проблемы с читабельностью кода, но в этом нет ничего плохого.

1 голос
/ 17 января 2010

Почему бы просто не ввести глобал, который вместо этого указывает на ваш синглтон? Хотя это «менее чисто», вы теряете производительность конечного пользователя. self.sharedUser.sharedValue будет иметь точно такую ​​же стоимость времени выполнения, как [[User sharedManager] sharedValue]

Точечная запись свойств - это самая глупая вещь, которая когда-либо была добавлена ​​в Objective-C - она ​​сбивает с толку людей, которые считают ее более эффективной.

Теперь, если вы имели в виду self-> sharedUser-> sharedValue, вы бы избегали поиска метода свойств и вместо этого использовали бы два указателя-блокировки - это будет примерно так же быстро, как и globalUser-> sharedValue, но имеет добавлены накладные расходы на необходимость нового указателя в каждом экземпляре каждого класса, который хочет получить доступ к глобальным переменным.

...