2009-05-05 4 views
2

Я делаю несколько приложений здесь и там, и я знаю свой путь. Меня всегда смущало доступ к глобальным атрибутам и где лучше всего их устанавливать. У меня есть несколько вопросов о доступе к вещам и доступе к ним.Лучшая практика делегирования приложений

Нужно ли включать заголовочный файл делегатов приложения в любой другой файл, к которому вы хотите получить доступ? Скажем, у меня есть контроллер представления, который я бы хотел использовать, мне нужно включить .h внутри моего контроллера .h? Или я могу установить:

@class AppDelegate; 

Вы можете получить доступ только делегат, набрав из:

[UIApplication sharedApplication].delegate 

каждый раз? Это то, к чему я просто привык? Или я мог установить следующее в моей реализации в каждом .h:

AppDelegate *delegate; 

И внутри функции init, поставить одноэлементный экземпляр этой переменной?

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

+0

Какие «глобальные атрибуты»? Такая вещь обычно может быть спроектирована лучше, без постоянного доступа к делегату приложения или любой другой общей структуре. – zoul

+0

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

+0

Объектно-ориентированный способ передачи данных между контроллерами заключается в явном определении свойств в следующем контроллере, который может быть установлен предыдущим контроллером. –

ответ

5

Возможно, вам нужно пересмотреть, как вы используете делегат приложения? Мне кажется, что, возможно, вы не делаете очень классный дизайн.

Независимо от того, это способ сделать это легко. Не помещайте это в init, просто используйте его, когда вам это нужно.

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

Естественно замените MyAppDelegate на фактическое имя класса вашего делегата приложения.

+0

И не повторять себя, вы можете поместить этот код в метод класса в делегата, как так: + (MyAppDelegate *) applicationDelegate { возвращение (MyAppDelegate *) [[UIApplication sharedApplication] делегат]; } –

0

Другая возможность заключается в том, чтобы добавить код, чтобы использовать должным образом с приведением ссылки приложение делегата как #define в файле заголовка приложения делегат, поэтому после его включения вы можете сделать что-то вроде:

MYAPPDELEGATE.customProperty = blah; 

Однако я, как правило, Благодарим за то, что вы изложили текст, представленный Джоном, поскольку использование #defines сбивает с толку завершение кода, которое я нахожу более раздражающим, чем просто написание строки.

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

Смежные вопросы