2013-09-12 4 views
0

У меня есть тестовый проект для использования частного объекта данных на нескольких контроллерах представления. (я скачал его из Интернета & ГИТ-хаб)Литье [UIApplication sharedApplication] .delegate

- (ExampleAppDataObject*) theAppDataObject; 
{ 
    id<AppDelegateProtocol> theDelegate = (id<AppDelegateProtocol>) [UIApplication sharedApplication].delegate; 
    ExampleAppDataObject* theDataObject; 
    theDataObject = (ExampleAppDataObject*) theDelegate.theAppDataObject; 
    return theDataObject; 
} 

Первый вопрос, theDelegate отлили с AppDelegateProtocol, даже это приложения UIApplication имя делегат ViewControllerDataSharingAppDelegate, и нет никакого предупреждения. Я не могу понять, почему, может быть, это потому, что это был тип идентификатора? (AppDelegateProtocol - это пользовательский протокол делегатов, объявленный им в AppDelegate.)

Во-вторых, он отображает этот код на каждом контроллере, и это похоже на однотонный шаблон. Я не думаю, что это не лучший способ передачи данных между контроллером представления. Каков наилучший способ передачи типа данных объекта?

Спасибо.

ответ

1

Создание протокола несколько отделяет код от конкретной реализации. Возможно, у вас может быть несколько приложений, каждый из которых использует свой собственный пользовательский класс в качестве делегата приложения, но все реализации соответствуют AppDelegateProtocol.

Раньше я использовал делегат приложения для хранения глобальных данных и методов при первом запуске в iOS.

Однако это заполняет делегат приложения специальным кодом приложения.

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

Его также легко сделать, чтобы ваш контейнер данных был однотонным, делая его совместимым с NSCoding. Затем каждый раз, когда вы переходите на задний план, просто сохраняйте свой синглтон где-то. При запуске приложения прочтите его.

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