что означает «делегат» в приложении для iPhone - PullRequest
1 голос
/ 06 июля 2010

Я обычно читаю слово «делегат» в яблочном документе и их библиотечной книге. Что именно означает это слово? Есть ли в iPhone особый смысл?

Большое спасибо.

Ответы [ 4 ]

5 голосов
/ 06 июля 2010

Делегаты - это шаблон проектирования на объектно-ориентированных языках, который позволяет объекту «вызывать» неизвестный код для выполнения действий или вычислений, которые этот объект не может эффективно выполнить самостоятельно. Допустим, у вас есть класс Dog:

@protocol DogDelegate;

@interface Dog : Wolf <Domesticated>
- (void)bark;
- (void)tiltHeadAdorably;

- (void)playWithToy: (Toy *)aToy;
@property (readonly) Toy *favoriteChewToy;

@property (readwrite, assign) id <DogDelegate> delegate; // "DELEGATE" PROPERTY DECLARED HERE
@end

Объект делегата обычно предоставляется кодом, который создает экземпляр Dog, и вызывается этим экземпляром для выполнения действий, которые сама собака не может делать. Например, рассмотрим этот интерфейс протокола DogDelegate, который определяет, что ожидается от объекта делегата Dog:

@protocol DogDelegate <NSObject>
@required - (void)letDogOut: (Dog *)aDog;
@required - (void)letDogIn: (Dog *)aDog;
@optional - (void)scratchDog: (Dog *)aDog forTimeInterval: (NSTimeInterval)duration;
@end

В этом случае экземпляр DogDelegate часто является владельцем Dog (а в Objective-C делегат часто владеет объектом, поэтому это хорошо согласуется с метафорой.) Собака, когда ему нужно пойти на ... собачью деятельность ... попросит своего делегата выполнить метод -letDogOut:, поместив собаку на заднем дворе. Когда это будет сделано, он попросит своего делегата выполнить метод -letDogIn:, возвращая собаку обратно внутрь. Когда собака хочет привязанности, если ее делегат может это сделать, она просит делегата поцарапать ее в течение некоторого периода времени, используя -scratchDog:forTimeInterval:.

3 голосов
/ 06 июля 2010

Делегат - это шаблон проектирования, который Apple активно использует.В двух словах, подумайте об этом, как «я отвечаю за обработку ...».Где ... это уведомление, событие, протокол и т. Д. Например, ваш AppDelegate отвечает за обработку App настройки, отображения, запуска.

Имейте в виду, я слишком упрощаюЭто.Но я уверен, что кто-то может дать гораздо более подробный ответ, если вам нужно.

0 голосов
/ 06 июля 2010

Делегат - это то же самое, что и функция обратного вызова в JS (за исключением того, что делегаты являются типобезопасными.) Например, если вы выполняете Ajax в JS, вы объявляете функцию обратного вызова, которая вызывается при Ajaxзвонок закончен.Таким же образом вы бы объявили функцию делегата, которая будет вызвана, например, когда закрыто диалоговое окно выбора песни.

0 голосов
/ 06 июля 2010

Делегат - это объект, который контролирует все приложение. Он показывает главное окно и сообщает приложению, что делать, когда оно запущено и закрыто. Это в основном командный центр вашего приложения. Лучший способ использовать это - вызвать другие контроллеры для отображения некоторых NIBS. На самом деле в приложении iPhone нет ничего особенного в делегате, но есть специальные методы, которые вызываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...