Поиск…


замечания

Протоколы и делегаты - это две связанные, но разные концепции:

Протокол - это интерфейс, который может соответствовать классу, что означает, что класс реализует перечисленные методы.

Делегат обычно является анонимным объектом, который соответствует протоколу.

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

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

Внедрение механизмов протоколов и делегирования.

Предположим, у вас есть два вида ViewA и ViewB

Экземпляр ViewB создается внутри ViewA , поэтому ViewA может отправлять сообщение в экземпляр ViewB's , но для обратного выполнения нам необходимо реализовать делегирование (так что использование экземпляра экземпляра ViewB's может отправить сообщение ViewA )

Выполните следующие шаги для осуществления делегирования

  1. В ViewB создайте протокол как

     @protocol ViewBDelegate 
    
    -(void) exampleDelegateMethod;
    
     @end
    
  2. Объявить делегата в классе отправителя

     @interface ViewB : UIView
     @property (nonatomic, weak) id< ViewBDelegate > delegate;
     @end
    
  3. Принять протокол в классе ViewA

    @interfac ViewA: UIView < ViewBDelegate >

  4. Установите делегат

    -(void) anyFunction   
    {
        // create Class ViewB's instance and set the delegate
        [viewB setDelegate:self];
    }
    
  5. Внедрить метод делегата в классе ViewA

    -(void) exampleDelegateMethod
    {
        // will be called by Class ViewB's instance
    }
    
  6. Используйте метод класса ViewB для вызова метода делегата как

    -(void) callDelegateMethod
    {
        [delegate exampleDelegateMethod];
        //assuming the delegate is assigned otherwise error
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow