Почему в какао используются делегаты, а не наследование? - PullRequest
6 голосов
/ 15 января 2010

Почему в какао используются делегаты, а не наследование?

Ответы [ 3 ]

6 голосов
/ 15 января 2010

При наличии делегатов один объект может быть делегатом многих других объектов. Например, ваш экземпляр MyController может быть делегатом NSTableView, NSTextField, NSWindow и любых других объектов, составляющих ваш интерфейс. Это дает компактное место для размещения всего кода пользовательского интерфейса, относящегося к одному разделу вашего пользовательского интерфейса.

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

Кроме того, это классическое наследование против композиции вопрос

5 голосов
/ 15 января 2010

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

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

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

Есть некоторые общие дискуссии относительно этих вещей здесь и здесь . Вы также можете найти некоторые старые вопросы SO здесь и здесь .

0 голосов
/ 09 июня 2011

Подробно обсуждаем здесь: http://www.cocoadev.com/index.pl?ExtendsIsEvil

И ребята из Java тоже это знают: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

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