Понимание @протоколов в Objective-C

#iphone #objective-c #c

#iPhone #objective-c #c

Вопрос:

Я новичок в программировании и новичок в Objective-C. Я изучил базовый C и решил начать изучать Objective-C. Я читаю «Программирование на Objective C 2.0» Стивена Кочана. Его раздел о протоколах расплывчатый. Он не объясняет подробно, ПОЧЕМУ кто-то хотел бы использовать протоколы в своих программах, и не приводит конкретного примера, как это реализовано в программе. Он пишет: «Вы можете использовать протокол для определения методов, которые вы хотите, чтобы другие пользователи, относящиеся к вашему подклассу, реализовали». Он также говорит, что протоколы хороши для того, чтобы подклассы могли реализовывать определенные методы, без необходимости сначала определять сами методы. Он также говорит, что протоколы могут использоваться в разных классах, потому что они бесклассовые.

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

Ответ №1:

Если вы занимались каким-либо объектно-ориентированным программированием, вы, вероятно, знаете протоколы как интерфейсы (они не идентичны, но концепция схожа). Если нет, думайте о протоколах как о чертежах.

Основная причина, по которой вы используете протоколы, заключается в том, что вы можете использовать объекты, не зная о них всего; все, что вам нужно знать, это то, что они реализуют набор методов. Например, если классы Business и Person соответствуют протоколу Contact , который определяет метод - (NSString *)phoneNumber , класс AddressBook может вызывать -(NSString *)phoneNumber , не зная, имеет ли объект тип Business или Person .

Как только вы начнете узнавать о Cocoa и делегатах, вы увидите, насколько мощными и важными являются протоколы.

Комментарии:

1. «они не идентичны» что не идентично?

Ответ №2:

Одним словом, делегаты.
Objective-c использует делегатов повсеместно, чтобы позволить классам взаимодействовать друг с другом.
Чтобы увидеть пример, смотрите Протокол UITableViewDelegate
Это не единственное место, где @protocol используется, но, вероятно, это наиболее распространенное его использование.

Ответ №3:

Протоколы — это улучшенные версии функций обратного вызова в C. Протоколы являются полезными конструкциями, когда вы хотите самостоятельно реализовать архитектуру MVC. Представления должны получать уведомления при изменении модели, вы можете использовать протоколы для уведомления наблюдателей о соответствующих событиях.

Ответ №4:

У вас мог бы быть класс, являющийся UIViewController, и он реализует несколько протоколов, таких как UITableViewDelegate, UITableViewDataSource. Класс может выполнять более одной вещи.

Ответ №5:

Как @conmulligan говорит, Objective-C использует протоколы, чтобы заставить классы взаимодействовать друг с другом.

Это один из многих способов обмена данными между классами.

Но протоколы — это обязательно плохой способ.

Я использую протоколы, если мне нужно создать повторно используемый объект, который обычно используется для многих проектов.

Итак, я создаю протоколы, чтобы упростить обслуживание моего кода.