#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 использует протоколы, чтобы заставить классы взаимодействовать друг с другом.
Это один из многих способов обмена данными между классами.
Но протоколы — это обязательно плохой способ.
Я использую протоколы, если мне нужно создать повторно используемый объект, который обычно используется для многих проектов.
Итак, я создаю протоколы, чтобы упростить обслуживание моего кода.