Что такое делегат в iPhone? - PullRequest
13 голосов
/ 05 июня 2010

Что такое точное значение делегата в iphone? Как это реализовано в UIViewController?

Ответы [ 5 ]

14 голосов
/ 05 июня 2010

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

Здесь больше документации здесь , которую вы должны прочитать, чтобы понять шаблон делегата в Cocoa и Cocoa touch, особенно в том, как используется делегирование между UIWindow и UIView. Это целостный шаблон дизайна в архитектуре iPhone, и его следует освоить, если вы хотите создать чистое приложение.

5 голосов
/ 05 июня 2010

Делегаты используются для делегирования задач объектов их владельцу (или любому объекту, на самом деле).Хорошая причина этого заключается в том, что это упрощает использование композиции вместо наследования.Делегаты - это ссылка на объект, который соответствует указанному протоколу, поэтому вы можете гарантировать, что он реализует требуемые методы.Хорошим примером является UIApplicationDelegate.Обратите внимание, как делегированные методы (из протокола) используют глаголы, которые applicationDid, applicationShould, applicationWill и т. Д. Обычно делегированные методы либо запрашивают разрешение на выполнение чего-либо (и выбирают сделать это таким образом, в методе, а не просто с помощью свойства BOOL).(для большей гибкости) или уведомить делегата о событии, которое произойдет или произошло.

3 голосов
/ 05 июня 2010

Делегирование является шаблоном , и термин означает то же самое в Какао.

Делегат не реализован в a UIViewController. Различные типы контроллеров представления assign могут делегироваться для выполнения определенных задач. Один из лучших примеров (если мы говорим об iPhone) - это UITableViewDelegate, который вызывается для определенных действий при возникновении определенных событий, связанных с таблицей.

1 голос
/ 03 января 2018

Делегат используется для передачи / передачи данных ч / б двумя объектами класса / структуры для выполнения задачи.Например: рассмотрим firstVC (отправитель, делегат или генеральный директор), который отправляет конфиденциальные данные на secondVC (получатель, делегат или секретарь).Это делается путем приведения secondVC в соответствие с

protocol passDataDelegate { func passdata(data: String) }

class secondVC : UIViewController, passDataDelegate {
func passdata(data: String) {
    print("CEO passed //(data)")
   }
}

class firstVC : UIViewController {
   var delegate : passDataDelegate?
}

. Теперь создайте объекты как firstVC, так и secondVC

let sender = firstVC()
let receiver = secondVC()

Так как приемник соответствует протоколу passDataDelegate.Таким образом, он имеет тип либо UIViewController, либо passDataDelegate, потому что если класс соответствует протоколу, то объект его класса может иметь протокол как тип.

Следовательно, назначить sender.delegate = receiver

Теперь мы можем, чтобы Генеральный директор (отправитель) мог передавать данные Секретарю (получателю) через его свойство делегата как

sender.delegate?.passdata("Confidential data")

Output: CEO passed Confidential data

Теперь Секретарь (получатель) может использовать эти данные для выполнения своей дальнейшей задачи.

0 голосов
/ 05 марта 2014

Концепция делегирования очень распространена в iOS. Объект часто полагается на другой объект, чтобы помочь ему с определенными задачами. Такое разделение интересов делает систему простой, поскольку каждый объект делает только то, в чем он хорош, и позволяет другим объектам заботиться об остальном. Представление таблицы предлагает отличный пример этого.

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