Как вы справляетесь с одноэлементными объектами в вашем приложении? - PullRequest
1 голос
/ 28 сентября 2010

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

#import "myAppDelegate.h"
// ...
[[(myAppDelegate *)[UIApplication sharedApplication] delegate] SingletonObj]

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

Второй подход заключается в создании легального синглтон-класса.Это, однако, требует больше работы.И я лично считаю, что одного класса Singleton более чем достаточно.

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

Ответы [ 3 ]

5 голосов
/ 28 сентября 2010

Синглтоны чаще всего обрабатываются в классе с помощью метода, подобного +sharedInstance.

Вот хорошая рецензия .

1 голос
/ 12 октября 2010

Я нашел шаблон xcode для простого создания синглтона в сети.

0 голосов
/ 28 сентября 2010

Лучшая практика - это когда-либо ставить вещи UIApplicationDelegate в ваш класс AppDelegate. Evarr.

Решите, действительно ли вам нужен синглтон. Если вы это сделаете, просто сделайте легальный синглтон-класс. Это будет легче в долгосрочной перспективе; Вы заметили, сколько времени потребовалось, чтобы напечатать этого монстра на линии, где вы пытались вытащить одноэлементный объект из AppDelegate? Agh.

(Кроме того, немного идиома: классы начинаются с заглавной буквы, а методы начинаются со строчной буквы; следовательно, ваша проблема означала [[(MyAppDelegate *)[UIApplication sharedApplication] delegate] singletonObj].)

...