iPhone правильное использование делегата приложения
Я ищу, чтобы иметь возможность ссылаться на определенные состояния/объекты в любом месте моего приложения. Например, пользователь входит в свое приложение, мне нужно вызвать веб-службу и получить информацию о пользователях. Тогда я хочу иметь возможность получить доступ к этой информации из любой точки приложения с чем-то вроде следующего:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
устанавливает переменную экземпляра в качестве объекта пользователя в делегате приложения и ссылается на нее оттуда, когда это необходимо плохой способ об этом? Я обычно там при входе пользователя.
хотел услышать, как профессионалы справляются с этим.
4 ответа:
обычно вы должны подключать вещи только к делегату приложения, если они:
- были созданы из того же файла NIB, что и делегат приложения (т. е. статические элементы пользовательского интерфейса в интерфейсах одного окна)
- связаны с обработкой событий уровня приложения, которая проходит через делегат приложения (например, пункт меню для окна настроек)
для всего остального, вы должны создать синглтон, который управляет доступом к их.
Джейсон Коко предложил маршрутизацию через контроллер приложения. В моих программах я обычно избегаю этого, поскольку я думаю, что это накладывает слишком большую ответственность на верхний уровень-я думаю, что вещи должны самостоятельно управлять, где это возможно, и что управление более высоким уровнем должно использоваться только тогда, когда есть требование для координации между модулями однорангового уровня.
Я не собираюсь ссылаться на свой собственный блог, но если Вы Google me и singletons, вы, вероятно, найдете сообщение, которое я написал дополнительные подробности.
Мэтт слишком скромный. Его сообщение на эту тему является одним из лучших, которые я читал, и заслуживает ссылки. 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
The
MyCommon
синглтон используется в любом месте в моем приложении следующим образом:int user = [MyCommon singleton].user;