Какова цель делегата iOS?

Я понимаю, что делает делегат в iOS, и я посмотрел пример кода, но мне просто интересно узнать о преимуществах такого типа инкапсуляции ( в отличие от включения методов делегатов в основной объект).

Ответ 1

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

Ответ 2

Преимуществом шаблона дизайна делегата является свободное соединение. Он позволяет классу A (делегат) зависеть от класса B (делегирующий класс) без класса B, который должен иметь какие-либо знания класса A. Это гарантирует, что отношение зависимости одностороннее, а не круговое.

Он также формирует основу (нижний регистр "f" ) фреймворков Apple, потому что он позволяет им при необходимости использовать ваш код, когда требуются функциональные возможности, характерные для вашего приложения. Например, при нажатии кнопки на клавиатуре или в представлении таблицы, сколько разделов должно быть.

Ответ 3

В iOS делегирование требует, чтобы класс "делегат" реализовал протокол, который содержит методы, о которых знает "делегирование". Все еще следует?

Реализация делегирующего класса вызовет эти методы протокола, но класс делегата будет реализовывать эти методы в своем классе.

Это упрощает занятия.

В действительности вам действительно не нужна делегирование, если вы можете добавлять новые методы в один класс. Но для класса UIKIT UIView Apple не позволит вам добавлять новые реализации в свой класс.

исправьте меня, если я ошибаюсь.

Ответ 4

Наиболее распространенным использованием делегата в iOS является установление связи внутри модулей, которые не связаны или частично связаны друг с другом. Например, прохождение данных вперед в UINavigationController очень просто, мы можем просто использовать segue. Однако отправка данных назад немного сложнее. В этом случае мы можем использовать делегат для отправки данных назад.

Пусть вызов, класс, связанный с первым контроллером ClassA и классом, связан со вторым контроллером ClassB. Первый контроллер подключен ко второму контроллеру с прямым переходом. Мы можем передавать данные от ClassA до ClassB через этот сеанс. Теперь нам нужно передать некоторые данные ClassA из ClassB, для которых мы можем использовать делегатов.

Класс отправителя (ClassB) должен иметь протокол в своем файле заголовка (.h), а также ссылку на него как делегат внутри блока, @interface ClassB.... @end. Эта ссылка позволяет ClassB знать, что у нее есть делегат. Любой класс, который хочет использовать этот ClassB, должен будет реализовать все необходимые для этого методы протокола (если они есть). Таким образом, класс приемника ClassA будет реализовывать этот метод, но вызов будет выполняться классом отправителя ClassB.

Таким образом, класс приемника не должен беспокоиться о внутренней структуре класса отправителя и получать необходимую информацию.

Ответ 5

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

Позволяет понять это на примере реальной жизни.

Предположим, что есть офис с 5 счетчиками. Вы заходите в офис и отправляетесь на счетчик 1 и представляете некоторые детали на этом счетчике. Теперь ваши данные должны пройти через какой-то процесс, который счетчик 3 знает, но счетчик 1 не делает. Таким образом, счетчик 1 скажет вам подождать некоторое время и передать свои данные счетчику 3, чтобы завершить процесс. В этом случае счетчик 3 является делегатом, который обрабатывает ваши события, которые отсылаются счетчиком 1. После того, как счетчик 3 завершит обработку ваших данных, он отправит обратно сообщение в счетчик 1, сообщив, что процесс завершен, и вы можете продолжить дальше.

Ответ 6

Делегирование, насколько я понимаю, это когда объект передает ответственность за передачу события другому объекту, тем самым "делегируя" ответственность за этот объект.

Например, если у вас есть NSButton в iOs, вы обычно назначаете делегата родительским контроллером. Это означает вместо того, чтобы обрабатывать события touchUp в определении кнопки, вместо этого обрабатывается в контроллере представления.

Ответ 7

Основным преимуществом делегирования по простому внедрению методов в "основном объекте" (по которому я предполагаю, что вы имеете в виду объект, выполняющий делегирование), является то, что делегирование использует динамическое связывание. Во время компиляции класс объекта делегата не обязательно должен быть известен. Например, у вас может быть класс, который делегирует метод windowDidMove:. В этом классе вы, вероятно, увидите некоторый бит кода, например

if([[self delegate] respondsToSelector:@selector(windowDidMove:)]) {
    [[self delegate] windowDidMove:notification];
}

Здесь класс делегирования проверяет во время выполнения, отвечает ли его делегат на заданный селектор методов. Это иллюстрирует мощную концепцию: делегирующий класс не должен знать ничего о делегете, кроме того, отвечает ли он определенным методам. Это мощная форма инкапсуляции, и она, возможно, более гибкая, чем отношение суперкласса-подкласса, поскольку делегат и делегат настолько слабо связаны. Также предпочтительнее просто внедрять методы в "первичный объект" (делегирующий объект), поскольку он позволяет изменять реализацию метода во время выполнения. Также можно утверждать, что эта динамическая среда выполнения делает код более опасным.

Ответ 8

Делегат является важным шаблоном дизайна для приложения iOS. Все приложения непосредственно или за капотом используют этот шаблон делегата. Шаблон проектирования делегата позволяет объекту действовать от имени другого. Если мы работаем с табличным представлением, есть " tableViewDelegate" и " tableViewDataSource". Но что это означает

Предположим, что у вас есть табличное представление. теперь некоторые основные проблемы для этого. 1. Что такое источник данных (данные, которые будут отображаться в виде таблицы) для этой таблицы? 2.Как много строк для просмотра таблицы и т.д. шаблон решения делегата решает этот вопрос, используя другой объект в качестве поставщика или решателя этих вопросов. Объект помещает себя в представление таблицы и обеспечивает представление таблицы " Да, я человек, который может помочь вам", пометив себя как делегат в представлении таблицы. Спасибо

Ответ 9

Делегирование означает, что один объект передает поведение другому объекту.

Ответ 10

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

Ответ 11

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

Ответ 12

В iOS-экосистеме, особенно UIKit Framework, которая состоит из UIApplication, UITableView, UICollectionView, UITextfield и т.д., интенсивно использует шаблон дизайна делегата и источника данных для передачи данных взад и вперед.

Конструкция шаблона делегирования используется для передачи/передачи данных из FirstVC (Делегирования) в SecondVC (Delegate) для выполнения задачи. Здесь SecondVC (Delegate) соответствует делегату протокола и реализует все его требования, такие как методы, предоставляя орган для выполнения этой задачи, заданной FirstVC (Delegator). Кроме того, объект FirstVC (Delegator) будет обладать необязательным свойством делегирования делегата протокола i.e, который должен быть назначен SecondVC (Delegate).

Теперь FirstVC (Delegator) может вызывать этот метод, находящийся в SecondVC (Delegate), передавая данные из своего свойства делегата.

EX: CEO (FirstVC), который передает данные i.e "конфиденциальные данные" секретарю (SecondVC) для выполнения дальнейших процессов с использованием этих данных.

Шаблон проектирования источника данных является частью шаблона делегирования, который используется для передачи/передачи данных из SecondVC (Delegate) в FirstVC (Delegator), когда задача назначена SecondVC (Delegate). Здесь SecondVC (Delegate) соответствует источнику данных протокола и реализует все его требования, такие как методы с типом возврата, предоставляя телу, чтобы он обратился к FirstVC (Delegator) после того, как задача была задана FirstVC (Delegator). Кроме того, объект FirstVC (Delegator) будет иметь необязательное свойство протокола dataSource типа i.e dataSource, который должен быть назначен SecondVC (Delegate).

Теперь FirstVC (Delegator) может вызывать этот метод с типом возвращаемого состояния, находящимся в SecondVC (Delegate), передавая данные из своего свойства dataSource.

EX: Секретарь (SecondVC) отвечает за данные i.e "Сэр, у меня уже слишком много работы. Пожалуйста, можете ли вы передать эти данные другим" генеральному директору (FirstVC). Теперь генеральный директор (FirstVC) проанализирует эти данные для дальнейших процессов.