Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
rom85ich
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 16
#1

Делегирование - Objective-C

28.02.2015, 13:43. Просмотров 870. Ответов 5
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане. Делегирование предусматривает наличие двух классов - делегатора и делегата. У делегатора объявляется свойство в классе, в которое можно записать делегат, реализующий определенный протокол. Мне не ясно какой объект производит запись в это свойство адрес делегата. Я так понимаю существует всего два варианта.
1) Это делает сам делегат;
2) Это делает третий какой-то внешний объект.
Какой вариант чаще используется в реальной практике программирования на Objective-C и какие могут быть еще варианты?
Также хотелось бы узнать: делегат должен всегда знать о своем делегаторе, т.е. он всегда должен иметь в своем классе поле ссылающееся на делегатор?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2015, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Делегирование (Objective-C):

Не понимаю делегирование - Objective-C
Доброго времени суток всем! Изучаю objC недолго, имею небольшой опыт в Си/Си++ Объясните мне, пожалуйста, зачем нужны делегаты? Все что...

Подскажите как лучше поступить(делегирование,дефайн.) - Objective-C
Господа... у меня есть property 'user'... который хранится в AppDelegate Я могу к нему достучаться через такую вот конструкцию ...

Делегирование массива - Программирование iOS
Здравствуйте. Для отображения детальной информации из plist, во втором контроллере, использую вот такой код: -...

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

Делегирование - C#
Пытаюсь осознать, что это и с чем едят, но что то не получается :umnik: class Delegate1 { public int x; ...

Делегирование - Java SE
В общем, нужно создать класс person, в котором содержатся фио, № паспорта и № телефона. У него должен быть метод создания, ввода и вывода...

5
Vorona
Peace 2 all shining faces
670 / 532 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
01.03.2015, 02:22 #2
чаще всего это делает сам делегат, т.е. представляет себя делегатом другого класса и в большинстве случаев вы будете делать именно так
конечно, могут встречаться случаи с каким-то адапторами, которых вы хотите сделать делегатами и пусть они разгребают рутину того или иного делегатора, а вам отдают только какие-то наиболее важные ивенты, но тогда скорее всего вы станете делегатом адаптора и т.д

короче чтобы особо не заморачиваться в частных случаях, обычно сам класс знает, что он хочет слушать чьи-то ивенты и сам на них подписывается, иначе в чем тогда будет его суть, если неизвестно кто и когда подпишет его на какого-то делегатора

Насчет обязательности присутствия поля ссылающегося на делегатор, то не всегда, именно по-этому есть практика, чтобы делегатор передавал первым параметром себя в методы, которые он кому-то делегирует

Яркий пример с UITableView, т.е вы можете в InterfaceBuilder добавить табличку и указать, что ее делегатом будет File's Owner, т.е. ваш вью-контроллер.
При этом вам совсем не обязательно иметь ссылку на табличку в этом вью-котроллере, просто реализуете методы UITableViewDelegate и все, при этом первым параметром в них вам приходит как раз та самая табличка
Кстати с UITableViewDatasource такая же история.

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

P.S.

И одна из прекраснейших особенностей этого шаблона, это то, что он диктует создание отдельного протокола, чтобы его было легко реюзать, и это то, что программисты часто заучивают и не учатся применять на других своих случаях. Т.е. заучили, что для делегата нужен отдельный протокол, чтобы описать отдельное поведение и потом его переиспользовать,а для остальных случаев все так же пишут тонны кода и god-классы, но ладно, это уже отдельная песня.
1
rom85ich
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 16
01.03.2015, 10:50  [ТС] #3
Цитата Сообщение от Vorona Посмотреть сообщение
короче чтобы особо не заморачиваться в частных случаях, обычно сам класс знает, что он хочет слушать чьи-то ивенты и сам на них подписывается
Скажите, а подписка делегата на ивенты делегатора производится только в init-методе делегата или ее можно реализовать также в любом другом методе делегата?
0
Vorona
Peace 2 all shining faces
670 / 532 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
01.03.2015, 20:02 #4
производится там, где это удобно, например во вью-контроллерах вы будете создавать ui-элементы на viewDidLoad и соответсвенно там и подписываться, либо нужно показать алерт - создаете, подписываетесь, показываете
если делегатор передается в init-метод и будет актуален во время всей жизни объекта, то подписываетесь в init'е
1
rom85ich
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 16
02.03.2015, 15:48  [ТС] #5
А бывает двунаправленное делегирование? Т.е. допустим есть два класса. Ивенты первого класса обрабатывает второй класс и соответственно ивенты второго класса обрабатывает первый класс. Встречается такое в реальной практике программирования?
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
02.03.2015, 15:59 #6
rom85ich, бывает всякое. Например в UI - обычная master-details заготовка Xcode в любом более вменяемом приложении так и работает.
Делегирование ли там или блоки или уведомления это уже другой вопрос.
1
02.03.2015, 15:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2015, 15:59
Привет! Вот еще темы с ответами:

Делегирование - C++
Привет!! у меня скоро экзамен по ООП, нужна небольшая консультация профессионалов по темам Делегирование и Прототипы (нигде не могу найти...

Делегирование домена - Web
Здравствуйте, дорогие форумчане! Объясните мне, пожалуйста, на пальцах, как "чайнику" в деле сайтостроительства, как мне делегировать...

делегирование dns - Хостинг
такая ситуация: Делегировал домен, но что-то уж долго он както делегируется. Позвонил провайдеру, а он мне вот что говорит: "На 27...

Делегирование событий - jQuery
Можно ли задать обработчик события, например click, до того как сам объект появится на странице, подгрузится через ajax например или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.