Обычно я читаю слово «делегат» в документе яблока и их библиотечной книге. Что именно означает это слово? Любое специальное значение в iPhone?Что означает «делегат» в приложении iPhone
спасибо.
Обычно я читаю слово «делегат» в документе яблока и их библиотечной книге. Что именно означает это слово? Любое специальное значение в iPhone?Что означает «делегат» в приложении iPhone
спасибо.
Делегаты представляют собой шаблон дизайна в объектно-ориентированных языках, которые позволяют объекту «вызывать» неизвестный код для выполнения действий или вычислений, которые этот объект не может эффективно выполнять самостоятельно. Допустим, у вас есть класс 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:
.
Делегат - это объект, который управляет всем приложением. Он показывает главное окно и расскажет приложению, что делать, когда он запущен и закрыт. Это в основном командный центр вашего приложения. Лучший способ использовать это - вызвать другие контроллеры для отображения некоторых NIBS. В приложении для iPhone действительно нет ничего особенного, но есть специальные методы, которые вызываются.
Благодарим вас за ответ. И я хотел бы спросить, что такое «NIBS»? – Questions
Вы думаете о делетете приложения, который является конкретным делегатом для определенного объекта, но не является конечным и все делегаты; они используются во всех какао и различных других объективах-C. (Nibs являются .NIB-файлами, ваши файлы интерфейса из Interface Builder.) –
NIB - это файл с расширением xib, и они являются видами для вашего приложения. @jonathon - он просит делегатов в приложениях для iPhone ... –
Делегат - образец дизайна, который Apple принимает в большой степени. Вкратце, подумайте об этом, как «я несу ответственность за обработку ...». Где ... это уведомление, событие, протокол и т. Д. Например, ваш AppDelegate
несет ответственность за обработку вашей установки App
, показ, запуск.
Пожалуйста, имейте в виду, что я более упрощаю это. Но я уверен, что кто-то может предоставить гораздо более подробный ответ, если вам нужно.
Делегат - это то же самое, что функция обратного вызова в JS (исключение состоит в том, что делегаты являются безопасными по типу.) Например, если вы делаете Ajax в JS, вы объявляете функцию обратного вызова, которая вызывается, когда Вызов Ajax завершен. Таким же образом вы объявляете функцию делегата, которую нужно вызвать, например, когда диалог выбора песни закрыт.
Благодарим вас за ответ. Это очень подробно и полезно. И могу ли я понять, что это контроль над классом? – Questions
Я не уверен, что вы подразумеваете под «контролем класса». Если вы имеете в виду «могу ли я сам создать делегата и написать его код?» то да - для чего они нужны. Если вы имеете в виду «могу ли я выбрать, какой объект является делегатом другого объекта?», То да, и по умолчанию объекты не имеют * * набор делегатов, поэтому вы должны * сделать это. Если вы имеете в виду «может ли делегат быть экземпляром' UIControl/NSControl'? » то да, опять же, хотя классы Apple обычно не реализуют методы делегирования для других классов. –
большое спасибо. Теперь я лучше понимаю. – Questions