Objective-C Language
Протоколы и делегаты
Поиск…
замечания
Протоколы и делегаты - это две связанные, но разные концепции:
Протокол - это интерфейс, который может соответствовать классу, что означает, что класс реализует перечисленные методы.
Делегат обычно является анонимным объектом, который соответствует протоколу.
Приложение Делегата, называемое Делегирование, является шаблоном проектирования.
С одной стороны у нас есть концепция Inheritance, которая создает плотную связь между подклассом и его суперклассом, тогда как шаблон проектирования делегирования является альтернативой избеганию этой жесткой связи, с помощью которой мы можем создать гораздо более слабые отношения, основанные на анонимных объектах Delegate .
Внедрение механизмов протоколов и делегирования.
Предположим, у вас есть два вида ViewA
и ViewB
Экземпляр ViewB
создается внутри ViewA
, поэтому ViewA
может отправлять сообщение в экземпляр ViewB's
, но для обратного выполнения нам необходимо реализовать делегирование (так что использование экземпляра экземпляра ViewB's
может отправить сообщение ViewA
)
Выполните следующие шаги для осуществления делегирования
В
ViewB
создайте протокол как@protocol ViewBDelegate -(void) exampleDelegateMethod; @end
Объявить делегата в классе отправителя
@interface ViewB : UIView @property (nonatomic, weak) id< ViewBDelegate > delegate; @end
Принять протокол в классе ViewA
@interfac ViewA: UIView < ViewBDelegate >
Установите делегат
-(void) anyFunction { // create Class ViewB's instance and set the delegate [viewB setDelegate:self]; }
Внедрить метод делегата в классе
ViewA
-(void) exampleDelegateMethod { // will be called by Class ViewB's instance }
Используйте метод класса
ViewB
для вызова метода делегата как-(void) callDelegateMethod { [delegate exampleDelegateMethod]; //assuming the delegate is assigned otherwise error }