2010-07-06 7 views

ответ

5

Делегаты представляют собой шаблон дизайна в объектно-ориентированных языках, которые позволяют объекту «вызывать» неизвестный код для выполнения действий или вычислений, которые этот объект не может эффективно выполнять самостоятельно. Допустим, у вас есть класс 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 «s, как ожидается, сделать:

@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:.

+0

Благодарим вас за ответ. Это очень подробно и полезно. И могу ли я понять, что это контроль над классом? – Questions

+0

Я не уверен, что вы подразумеваете под «контролем класса». Если вы имеете в виду «могу ли я сам создать делегата и написать его код?» то да - для чего они нужны. Если вы имеете в виду «могу ли я выбрать, какой объект является делегатом другого объекта?», То да, и по умолчанию объекты не имеют * * набор делегатов, поэтому вы должны * сделать это. Если вы имеете в виду «может ли делегат быть экземпляром' UIControl/NSControl'? » то да, опять же, хотя классы Apple обычно не реализуют методы делегирования для других классов. –

+0

большое спасибо. Теперь я лучше понимаю. – Questions

-2

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

+0

Благодарим вас за ответ. И я хотел бы спросить, что такое «NIBS»? – Questions

+0

Вы думаете о делетете приложения, который является конкретным делегатом для определенного объекта, но не является конечным и все делегаты; они используются во всех какао и различных других объективах-C. (Nibs являются .NIB-файлами, ваши файлы интерфейса из Interface Builder.) –

+0

NIB - это файл с расширением xib, и они являются видами для вашего приложения. @jonathon - он просит делегатов в приложениях для iPhone ... –

3

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

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

0

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

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