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 }