Cocoa编程学习笔记之MVC

Cocoa 使用了一种修改版本的MVC模式来处理GUI的显示。MVC模式(自1979年以来)已经出现很长时间了,它皆在分离显示用户界面所需的大量任务,并处理用户交互。正如名称所蕴含的,MVC具有三个主要部分,Model(模型)、View(视图)和Controller(控制器):

模型——模型是特定于领域的数据表现形式。比如说,我们正在创建一个任务列表应用程序。你可能会有一个Task对象的集合,书写为List。 你或许把这些数据保存在数据库、XML文件,或者甚至从Web Service中得到,不过MVC不那么关心它们是在何处/如何来持久保存的(乃至它们是什么)。相反,它特别专注于如何显示这些数据,并处理与用户交互的,好的模型类不包括任何有关用户界面的内容,可以在多个应用程序中使用。
视图——视图代表了数据如何实际地显示出来。在我们这个假设的任务应用程序中,会在一个网页(以HTML的方式)中来显示这些任务,也会在一个WPF页面中(以XAML的方式)来显示,或者在一个iPhone应用程序中显示为UITableView 。如果用户点击某个任务,要删除之,那么视图通常会触发一个事件,或对Controller(控制器)进行一个回调,好的视图类是通用类,可以在多个应用中使用。
控制器——控制器是模型和视图间的粘合剂,负责控制整个应用的流程。控制器的目的就是获取模型中的数据,告知视图来显示。控制器还侦听着视图的事件,在用户选中一个任务来删除的时候,控制着任务从模型中删除。
通过分离显示数据、持久化数据和处理用户交互的职责,MVC模式有助于创建易于理解的代码。而且,它促进了视图和模型的解耦,以便模型能被重用。例如,在你的应用程序中,有两个界面,基于Web的和WPF的,那么你可以在两者中都使用同样的模型定义代码。

因而,在很多MVC框架中不管具体的工作方式如何,基本原理都大致如此的。然而,在Cocoa(及Cocoa Touch)中,还是或多或少有所不同,苹果用MVC来代表Views(视图)、View Controller(视图控制器)和Models(模型);但是在不同的控件中,它们却不是完全一致的,实现的方式也不太一样。

在Objective-C/Cocoa的世界里,我们建立的controller通常是指应用程序(Application)的委托(Delegate),或者可以简单称做app delegate。当你在Objective-C里面建立一个app delegate的时候,这个delegate可以做为你所有model和view的controller,或者你也可以为不同的model和view分别创建controller。

时间: 2024-09-27 06:38:27

Cocoa编程学习笔记之MVC的相关文章

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

python网络编程学习笔记(二):socket建立网络客户端_python

1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通

Linux服务器Shell编程学习笔记

Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):  代码如下 复制代码 #!/bin/sh ...注意:最好使用"!/bin/bash"而不是"!/bin/sh",如果使用tc shell改为tcsh,其他类似. 符号#!用来告诉系统执行该sell脚本的程序,本例使用/bin/sh.编辑结束并保存后,如果要执行该shell脚本

Python核心编程学习笔记之映射类型(上)

 根据核心编程第二版学习Python3.x的内容,可能有些欠缺,有些方法在3.x中已经不提供了,就暂时先略过了.等以后再对比2.x和3.x的区别,作下笔记吧 1.    Python中字典的定位: a)      字典是python中唯一的映射类型,通常被认为是可变的哈希表. b)     字典对象是可变的,能存储任意多个python对象. c)      字典是Python中最强大的数据类型之一 2.    字典(dict)和序列类型容器类(列表和元组)的区别: a)      存储和访问数据

Oracle专家高级编程学习笔记( 二)

oracle|笔记|编程|高级 Oracle体系结构的3个主要组件:1.文件:组成数据库实例的5个文件(参数文件,控制文件,数据文件,临时数据文件,重做日志文件)2.系统全局区域SGA( System Global Area): Java池,共享池等3.物理进程与线程: 在数据库上运行3种不同类型的进程(服务器server进程,后台backgroud进程,从属slave进程) 术语解释:数据库: 物理操作系统文件的集合实例: 一组oracle进程和SGA二者关系:一个数据库可以被多个实例装载mo

Socket网络编程学习笔记(1):常用方法介绍

虽然天天上博客园欣赏各位"大侠"的杰作,偶然回首,突然发 现自己已成"潜水者"久矣.本来对于自己有限的水平,有点不好意 思在此发贴,不过潜伏久了,才慢慢意识到老是通过浏览他人的文章虽然能够提 高自己能力,能够及时的获取新技术新思想,但却只能停留在他人的思想上.通 过学习,加上自己的想法,再写出来,让大家来指证错误,不仅能够巩固自己的 知识,也可以让一些跟我一样迷惘的朋友们不用再去走一些弯路,岂不是两全其 美,本着这样的想法,打算把自己平时的所学所想都写下来,欢迎各路

java 数据库编程 学习笔记 不断更新

最近开始学习java,感觉java的数据库编程需要发个随笔记录一下,话不多说 切入正题.   一.数据库访问技术的简介                      应用程序  →  执行SQL语句 →数据库 → 检索数据结果 → 应用程序     ( ODBC         JDBC(两个常用的API))    java主要使用的 JDBC驱动程序进行数据库的编程 Java 应用程序 <------> JDBC   <------>  数据库     二.JDBC 的体系结构  

python网络编程学习笔记(一)_python

学习用书:<python 网络编程基础>作者John Goerzen 第一部分底层网络学习         Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作         在<python 网络编程基础>一书中,作者列出了一个简单的Python客户端程序,具体如下: 复制代码 代码如下: import socket,sysport =70host=sys.argv[1] filename=sys.a

socket编程学习笔记(2), C#网络编程概念性介绍

C#网络编程实际就是对WinSock进行了进一步的包装. 1. IPAddress,IPEndPoint, SocketAddress类 IPAddress就是一个IP 地址类, IPEndPoint就是IPAddress+Port,对应的就是sockaddr_in这个struct. SocketAddress类可以存储IPEndPoint类序列化以后的信息. 1.1 这两个类常用和注意的一些地方:¼ 1) IPAddress ip = IPAddress.Parse("192.168.123.