Собственное использование приложения делегата приложения iPhone
Я ищу, чтобы иметь возможность ссылаться на определенные состояния / объекты в любом месте приложения. Например, пользователь регистрируется в своем приложении, мне нужно вызвать веб-службу и получить информацию о пользователях. Затем я хочу иметь доступ к этой информации из любого места приложения с чем-то вроде следующего:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; user = delegate.u;
Устанавливает ли переменная экземпляра как объект User в делетете приложения и ссылается на него оттуда, когда это необходимо, плохой путь? Обычно я устанавливаю его там по имени пользователя.
Хотел услышать, как профессионалы справляются с этим.
- Включить немодульный заголовок внутри фрейм-модуля
- Рисование формы волны с помощью AVAssetReader
- На iPhone: узнать, какая песня сейчас играет? (в музыкальном проигрывателе iPod)
- Ошибка сервера Bootstrap в Xcode IPHONE
- Прокрутка двумя пальцами с помощью UIScrollView
- Разработка iPhone: освобожден указатель
- @synthesize vs @dynamic, каковы различия?
- Как я могу «разрезать» прозрачное отверстие в UIImage?
- UIDatePicker, устанавливающий максимальные и минимальные даты на основе сегодняшней даты
- Что делает флаг компоновщика -all_load?
- Как получить счетчик ссылок NSObject?
- Как включить и использовать новые шрифты в iPhone SDK?
- Как отсортировать NSMutableArray с помощью sortedArrayUsingDescriptors?
Как правило, вы должны подключать вещи только к делегату приложения, если они:
- Были созданы из того же файла NIB, что и делегат приложения (т.е. статические элементы пользовательского интерфейса в интерфейсах одного windows)
- Связаны с обработкой событий на уровне приложений, которые проходят через делегат приложения (например, пункт меню для windows настроек)
Для всего остального вы должны создать singleton, который управляет доступом к ним.
Джейсон Коко предложил выполнить маршрутизацию через Application Controller. В моих программах я обычно избегаю этого, так как я считаю, что он накладывает слишком большую ответственность на высший уровень – я думаю, что все должно быть самоконтролем, где это возможно, и что управление более высоким уровнем должно использоваться только тогда, когда есть потребность в координации между экспертами, уровня.
Я не собираюсь связывать свой собственный блог, но если вы Google я и синглтоны, вы, вероятно, найдете сообщение, которое я написал, более подробно.
Мэтт слишком скромный. Его публикация на эту тему является одним из лучших, которые я прочитал, и заслуживает ссылки. http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html
Я не вижу никаких проблем с вашим подходом. Обычно я использую синглтон, чтобы справиться с этой ситуацией:
// MyCommon.h: @interface MyCommon class MyCommon : NSObject { int user; }; @property(assign) int user; + (MyCommon *)singleton; @end // MyCommon.m: @implementation MyCommon static MyCommon * MyCommon_Singleton = nil; + (MyCommon *)singleton { if (nil == MyCommon_Singleton) { MyCommon_Singleton = [[MyCommon_Singleton alloc] init]; } return MyCommon_Singleton; } @end
Затем синглтон MyCommon
используется в любом месте приложения следующим образом:
int user = [MyCommon singleton].user;
Обычно вы запрашиваете у controllerа своего приложения эту информацию, и он будет отвечать за знание того, как его хранить / искать в любой модели данных. Контроллер вашего приложения может быть или не быть таким же, как делегат приложений (в большинстве простых приложений это одно и то же).