framework iphone objective-c ios model-view-controller key-value-observing

iphone - framework - MVC en Cocoa Touch: ¿Cómo interactúan la vista y el modelo?



cocoa framework (3)

Descubrí que la mejor teoría básica sobre el tema la enseña en la Universidad de Stanford un profesor muy talentoso llamado Paul Haggarty. Recomiendo buscar este curso en iTunes U: hay 18 conferencias en video HD y archivos ppt para aprender. Aquí hay un enlace al sitio web del curso: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/

Recuerdo que revisa la parte de MVC del material de forma rápida pero completa, dejando esto muy claro. Además, tendría que decir que la escuela de pensamiento n. ° 1 es con la que estoy más de acuerdo.

Siempre pensé que entendía MVC, pero últimamente, después de leer muchas publicaciones de Stack Overflow sobre el tema, descubrí que las formas en que los frameworks MVC hacen las cosas son ligeramente diferentes entre sí. Más específicamente, en la forma en que la vista y el modelo interactúan, parece haber dos escuelas de pensamiento:

  1. Cuando el usuario interactúa con la vista, la vista notifica al controlador, y el controlador a su vez le hace algo al modelo. Cuando el modelo cambia, el modelo notifica al controlador, que a su vez actualiza la vista.

  2. La vista se suscribe al modelo. Cuando el modelo cambia, la vista parece ser notificada directamente de que necesita actualizarse.

Entonces mi pregunta es: En Cocoa Touch (iOS), ¿cuál es la mejor manera de hacer MVC? Principalmente estoy programando para iOS estos días y estoy interesado en las mejores prácticas solo para esta plataforma. (No me interesa cómo ASP.NET, Rails, Backbone, etc. hacen cosas).

Sería maravilloso si se pudiera proporcionar algún código de ejemplo de KVO . Gracias. =)


En mi experiencia, (1) debería usarse en la mayoría de los casos.

En (2), dado que la vista no es propietaria del modelo, siempre debe pasar los cambios del modelo a la vista para representar y si una vista podría actualizarse desde varios modelos, necesita escribir un código separado para eso.

En (1), el método para actualizar la vista desde el controlador podría ser utilizado por varios modelos, el controlador tiene referencia a los modelos, por lo que no es necesario pasar ninguna información en la notificación.

En cuanto al rendimiento, no sé si hay algo diferente, pero el código en (1) sería mucho más claro.


Apple defiende el uso del primer método , creo.

Es la versión modificada del modelo MVC estándar (el segundo enfoque), donde el modelo y la vista están totalmente separados. Personalmente, creo que es más limpio y más extensible.

  1. La lógica está centralizada en el controlador.
  2. No es necesario escribir vistas personalizadas para manejar eventos del modelo. Normalmente, escribirías un controlador personalizado pero usarías las clases de vista dadas por el SDK. Siguiendo el segundo método, puede que tenga que crear una vista personalizada solo para manejar eventos del modelo.