правильное использование iphone делегата приложения

<p>я ищу возможность ссылаться на определенные состояния/объекты в любом месте моего приложения. например, пользователь входит в свое приложение, мне нужно вызвать веб-сервис и получить информацию о пользователях. затем я хочу получить доступ к этой информации из любого места приложения с помощью чего-то вроде следующего:</p><pre><code>myappdelegate *delegate = [[uiapplication sharedapplication] delegate]; user = delegate.u; </code></pre><p>является ли установка переменной экземпляра в качестве объекта user в делегате приложения и обращение к ней оттуда, когда это необходимо, плохим способом? я обычно устанавливаю его там при входе пользователя в систему.</p><p>хотелось услышать, как профессионалы справляются с этим.</p>

<p>обычно вы должны подключать вещи к делегату приложения, только если они:</p><ul> <li>были созданы из того же файла nib, что и делегат приложения (то есть статические элементы пользовательского интерфейса в интерфейсах с одним окном)</li> <li>связаны с обработкой событий уровня приложения, которая проходит через делегат приложения (как пункт меню в окне настроек)</li> </ul><p>для всего остального вы должны создать синглтон, который управляет доступом к ним.</p><p>джейсон коко предложил маршрутизацию через контроллер приложений. в моих программах я обычно избегаю этого, так как считаю, что это накладывает слишком большую ответственность на верхний уровень - я думаю, что вещи должны самоуправляться там, где это возможно, и что управление на более высоком уровне следует использовать только тогда, когда существует потребность в координации между коллегами. модули уровня.</p><p>я не собираюсь ссылаться на свой собственный блог, но если вы будете гуглить меня и синглтоны, вы, вероятно, найдете пост, который я написал, более подробно.</p>

<p>мэтт слишком скромен. его публикация на эту тему является одной из лучших, которые я прочитал, и заслуживает ссылки. <a href="http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html">http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html</a> </p>

<p>я не вижу никаких проблем с вашим подходом. я обычно использую синглтон, чтобы справиться с этой ситуацией:</p><pre><code>// 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</code></pre><p>синглтон <code>mycommon</code> затем используется в любом месте моего приложения следующим образом:</p><pre><code>int user = [mycommon singleton].user;</code></pre>

<p>обычно вы запрашиваете эту информацию у контроллера вашего приложения, и он отвечает за знание того, как ее хранить/искать в любой существующей модели данных. контроллер вашего приложения может совпадать или не совпадать с делегатом приложения (в большинстве простых приложений он совпадает).</p>