Является ли делегат аналогом контроллера MVC? - PullRequest
3 голосов
/ 14 декабря 2011

Я видел эту статью:

http://www.cimgf.com/2008/10/01/cocoa-touch-tutorial-iphone-application-example/

"Делегат == Контроллер Слова делегат и контроллер могут использоваться как синонимы .... "

Я не уверен, что он говорит, но я понимаю mvc лучше, чем делегаты в программировании.

Являются ли эти два одинаковыми?

Ответы [ 2 ]

6 голосов
/ 14 декабря 2011

Они действительно на разных уровнях.

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

например, большинство приложений Какао захотят сделать что-то особенное при запуске приложения (довольно скучно, если они этого не сделали). Вместо того, чтобы требовать от каждого приложения Cocoa реализации собственного подкласса NSApplication только для переопределения –applicationWillFinishLaunching:, NSApplication спроектирован так, что если вы установите свойство delegate для действительного объекта, и у этого объекта будет метод –applicationWillFinishLaunching: это будет называть это.

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

Многие классы какао работают так, что означает, что вам вряд ли когда-нибудь придется создавать подклассы для добавления собственного поведения. В некоторых других языках и средах способ, которым вы должны добавить свое пользовательское поведение, заключается в создании подклассов. Хотите пользовательскую кнопку в Java? Просто создайте новый класс, который расширяет JComponent и реализует MouseListener, затем переопределяет mouseClicked и т. Д. Это не способ Какао.

Контроллер, как вы знаете, является Объектом, ответственным за координацию Модели и Представления.

Как это бывает, если вам нужно добавить пользовательское поведение к экземпляру объекта модели или объекта представления - скажем, например, у вас есть объект NSTableView, и вы хотите добавить пользовательское поведение при выборе строки - вы, вероятно, уже иметь собственный объект Controller, и это часто идеальное место для размещения кода. Просто установите TableView's.delegate = controller. здесь мы видим, что tableView имеет метод делегата - tableViewSelectionDidChange: Вам не нужно создавать подкласс NSTableView.

Я не считаю, что это означает, что делегат и контроллер - это одно и то же.

1 голос
/ 14 декабря 2011

Делегаты - это фоновые процессы, выполняющиеся для захвата события.Они являются контроллером, как вы их узнаете из нашей дружественной динамики разработки программного обеспечения MVC.Событием может быть встряхивание касанием экрана нажатием кнопки и т. Д. Делегат - это слово, которое Coccoa использует для обозначения, которое, по словам автора вашего руководства, делает их «взаимозаменяемыми».Надеюсь, это поможет

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