Что такое протокол? - PullRequest
9 голосов
/ 21 октября 2010

Я прочитал документацию, но я все еще в замешательстве.Может кто-нибудь объяснить, что такое протокол?(Вы могли бы привести примеры кода, но я действительно ищу объяснение)

Ответы [ 2 ]

11 голосов
/ 21 октября 2010

Вот отличная статья об этом . По сути, протокол в Objective-C очень похож на интерфейс в Java или чисто виртуальный класс в C ++ (хотя не совсем так, как чисто виртуальные классы могут иметь члены данных ...). По сути, это гарантия того, что определенный класс знает, как реагировать на данный набор методов (сообщений).

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

4 голосов
/ 04 мая 2012

A protocol - это средство для определения списка обязательных и / или необязательных методов, которые реализует класс.Если класс принимает протокол, он должен реализовать все необходимые методы в протоколах, которые он принимает.Какао использует протоколы для поддержки межпроцессного взаимодействия через сообщения Objective-C.Кроме того, поскольку Objective-C не поддерживает множественное наследование, вы можете добиться аналогичной функциональности с протоколами, поскольку класс может использовать более одного протокола.

Хорошим примером протокола является NSCoding, для которого требуется два обязательных протокола.методы, которые класс должен реализовать.Этот протокол используется для обеспечения возможности кодирования и декодирования классов, то есть архивирования объектов путем записи в постоянное хранилище.

   @protocol NSCoding

     -(void)encodeWithCoder:(NSCoder *)aCoder;

     -(id)initWithCoder:(NSCoder *)aDecoder;

   @end

Чтобы принять протокол, заключите его имя в <>, как показано ниже

   @interface SomeClass : NSObject <NSCoding> 

    {
     some variables
    }

Как определить протокол?

Мы можем создать оба обязательных дополнительных метода в протоколе.Далее следует определение протокола с именем «Hello»:

   @protocol Hello
    - (BOOL)send:(id)data;
    - (id)received;
   @optional
    - (int)progress;
   @end

Чтобы использовать протокол, как в примере выше, объявите протокол в интерфейсе и напишите необходимые методы в реализации класса:

// Интерфейс @interface AnotherClass: NSObject

   {
    some declaration
   }

// Реализация @implementation AnotherClass

  - (BOOL)send:(id)data
   {
    some declaration
   }

  - (id)received
   {
    some code
   }

// Необязательный метод

  - (int)progress
   {
    some code 
   }
   @end

Я надеюсь, что это поможет вам выучить протокол.

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