xCode / Objective-C Анатомия Аналогии - Помогите Нуб получить его - PullRequest
0 голосов
/ 22 марта 2012

ОК, поэтому я пытаюсь начать работу с Xcode, и у меня есть некоторый опыт работы с ООП в целом, но в основном я привык к написанию сценариев.В любом случае, я пытаюсь разобраться с некоторыми понятиями в задачах C и XCode, и у меня возникли некоторые проблемы, соединяющие все воедино.

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

Скажем, у меня есть почтальон класса.Теперь у почтальона есть методы sortMail () и deleteMail ().Что является примером метода делегата.И если используется делегат, куда возвращаются данные?Внутри делегата?Нужно ли создавать экземпляр делегата, а затем читать его результаты, или делегат вроде бы возвращает результаты вызывающему объекту?Откуда приходят протоколы ...

Простые примеры, пожалуйста :) Детские шаги.

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Протоколы и делегаты часто встречаются вместе. Это помогает понять, какой протокол является первым.

Протокол

Протокол - это способ дать классу обещание реализовать стандартный набор методов.

Пример. Сертифицированный электрик обладает определенным набором навыков, которым обладают все сертифицированные электрики. Если вам нужно, чтобы кто-то сделал что-то, что сертифицированный электрик сертифицировал, то любой сертифицированный электрик должен быть в состоянии сделать это (по крайней мере, в теории).

Делегирование

Теперь делегат - это объект, на который возложена ответственность за выполнение определенных требований. Один объект может получить ответственность за удовлетворение потребности другого объекта.

Пример: при строительстве дома в доме должны быть проложены провода и т. Д. Эта ответственность была возложена на сертифицированного электрика, и мы знаем, что он может сделать это, потому что он сертифицирован (т.е. реализует определенный протокол).

Собираем все вместе в контексте Какао:

A UITableView нужны ячейки, чтобы они могли отображать их. Чтобы предоставить ячейки, необходимо создать класс (или, по крайней мере, указать), который реализует протокол UITableViewDataSource. Это гарантирует, что класс делает все необходимое, чтобы снабдить UITableView необходимыми ячейками.

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

Пример

1 голос
/ 22 марта 2012

Делегат - это объект, который обрабатывает определенные функции для другого объекта - как в «Объекте A делегирует определенные функции объекту B».

Например, вы можете использовать экземпляр класса Apple NSURLConnection для запроса веб-службы, но код Apple, очевидно, не будет знать, что делать с загружаемыми данными, поэтому вы предоставляете объект делегата для справиться с этой функциональностью. NSURLConnection затем делегирует эту функциональность вашему объекту, передавая ему сообщения, когда ему нужно что-то вроде обработки загружаемых данных.

Другим примером является табличное представление. Apple написала много кода для отображения табличных представлений и обработки взаимодействий с ними, но она не знает, какие данные вы хотите отобразить или что нужно делать с этими данными, когда кто-то взаимодействует с ними. Таким образом, вы можете предоставить делегировать объекты для этих вещей. Когда табличное представление должно знать, какие данные отображать, оно просит вашего делегата извлечь данные для него. Когда пользователь выбирает элемент, он просит вашего делегата обработать его.

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

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