Я прочитал документацию, но я все еще смущен. Может кто-нибудь объяснить, что такое протокол? (Вы могли бы привести примеры кода, но я действительно ищу объяснения)
Что такое протокол?
Ответ 1
Вот отличная статья об этом. Фактически, протокол в Objective-C очень похож на интерфейс в Java или чистый виртуальный класс в С++ (хотя не так, как чистые виртуальные классы могут иметь члены данных...). Это в основном гарантия того, что конкретный класс знает, как реагировать на заданный набор методов (сообщений).
Изменить Исходная статья исчезла, поэтому я заменил ее другим учебником.
Ответ 2
Протокол - это средство для определения списка необходимых и/или необязательных методов, которые реализует класс. Если класс принимает протокол, он должен внедрять все необходимые методы в принимаемых им протоколах. Cocoa использует протоколы для поддержки межпроцессного взаимодействия через сообщения 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
Я надеюсь, что это поможет вам узнать протокол.