`
mikixiyou
  • 浏览: 1098437 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:352967
社区版块
存档分类
最新评论

iOS开发(stanford2011)笔记第一课MVC架构

    博客分类:
  • iOS
阅读更多

斯坦福大学(stanford university)的iphone开发课由来已久。最近学习了2011年秋季的iphone开发教程。该课程是基于 iOS5的,最新的教程。

这些课程讲的知识点很全面,也讲的很快。于是我做了些笔记,权当督促自己。

 

在第一课中,介绍了iOS的四层结构,和MVC架构。MVC架构在iOS开发中非常普遍的应用架构,其中使用到的target-action和delegate模式很使用,最大程度上降低了各个部分的耦合度。

 

1 、先决条件

熟悉面向对象开发,对这些名词不怵。

Class (description/template for an object)

Instance (manifestation of a class)

Message (sent to object to make it act)

Method (code invoked by a Message)

Instance Variable (object-specific storage)

Superclass/Subclass (Inheritance)

Protocol (non-class-specific methods)

 

2 、苹果的iOS 结构

分成四层架构,分别为Cocoa TouchMediaCore ServicesCore OS

Core OS 是最底层的,提供的都是CAPIMedia 开始,提供的是OBJCAPI ,就是面向对象的API 。我们在开发应用时使用的最多的是cocoa touch 框架。

 

Cocoa Touch

Multi-Touch

Core Motion

View Hierarchy

Localization

Controls

Alerts

Web View

Map Kit

Image Picker

Camera

 

Media

Core Audio

OpenAL

Audio Mixing

Audio Recording

Video Playback

JPEG, PNG, TIFF

PDF

Quartz (2D)

Core Animation

OpenGL ES

 

Core Services

Collections

Address Book

Networking

File Access

SQLite

Core Location

Net Services

Threading

Preferences

URL Utilities

 

Core OS

OSX Kernel

Mach 3.0

BSD

Sockets

Security

Power Management

Keychain Access

Certificates

File System

Bonjour

 

 

3 、在iOS 开发中MVC 架构

 

Model ,应用有些什么数据

 

View ,配合Controller 显示数据,称之controller 的仆人

 

Controller ,如何将model 中的数据显示给用户

 

Controller 能直接向Model 发送消息,也能直接向它的视图发送消息,使用的IBOutlet 对象。但是,ModelView 两个对象则老死不相往来,它们绝对不会相互发送消息。这就是MVC 架构的最基本的原则。

 

View 是否可以主动向Controller 发送消息呢?在实际应用中,这种需求是必须的。

 

iOS 开发中有一种技术,称之为TargetAction 模式,可以来实现这个需求。

首先在Controller 上放置一个target 对象,就是controller 本身,再到View 上设置一个action ,发现执行什么操作的消息。

例如,在一个应用的视图界面上,有一个按钮,执行touch up inside 操作,该操作已经配置了一个action 方法,发送目标是视图控制器。在Controller 类中已有一个此方法的定义,于是在该目标上执行该方法。这就是target-action 模式。

一旦target 改变,执行方法的定义也会改变,controller 操作的结果可以可以反馈到视图界面上。

这种target-action 模式阐述了MVC 架构的特性。

 

苹果文档对于target-action 模式的定义如下:

Target-action is a design pattern in which an object holds the information necessary to send a message to another object when an event occurs. The stored information consists of two items of data: an action selector, which identifies the method to be invoked, and a target, which is the object to receive the message. The message sent when the event occurs is called an action message. Although the target can be any object, even a framework object, it is typically a custom controller that handles the action message in an application-specific way.

 

 

还有一种技术为delegate ,中文通常为翻译成" 委托" 。它也可以实现viewcontroller 的消息交互。

 

View 中很多对象如UITableView 都有一个属性delegateController 会将其自身设置为该属性的值,这样viewdelegate 就是controllerview 对象称之为delegating objectcontroller 对象称之为delegate

View 对象在合适的时间发送一个消息到delegate ,这里就是controller ,该消息通知delegateview 执行了或者将要执行一个操作。controller 执行操作用于响应该消息。

 

简而言之,delegate 的最大价值是让你在一个中心对象上很容易地定义一些对象的行为。另外,Data Source 也属于delegate 的一种。

当然,delegate 作为一种设计模式,在iOS 中还有很多很多用途,如不同的controller 之间的交互,不同视图之间的交互。

 

苹果文档对于delegate 模式的定义如下:

 

Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object—the delegate—and at the appropriate time sends a message to it. The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.

 

 

Data Source

 

A data source is almost identical to a delegate. The difference is in the relationship with the delegating object. Instead of being delegated control of the user interface, a data source is delegated control of data. The delegating object, typically a view object such as a table view, holds a reference to its data source and occasionally asks it for the data it should display. A data source, like a delegate, must adopt a protocol and implement at minimum the required methods of that protocol. Data sources are responsible for managing the memory of the model objects they give to the delegating view.

 

 

注,我在delegate模式上绕了很久,至今还是没完全明白。

 

(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1586712 )

 

Model 有时候也要向Controller 主动去发送一些消息。这里是通过Notification 来实现的。

 

0
0
分享到:
评论

相关推荐

    iOS7应用开发Machismo(Stanford iOS7)第二节课课堂代码

    总之,"iOS7应用开发Machismo(Stanford iOS7)第二节课课堂代码"涵盖了Swift编程语言、iOS应用基础架构、用户界面设计、MVC模式、Auto Layout、Core Data以及网络请求等多方面内容。通过实践这个项目,开发者不仅...

    斯坦福大学IOS教程:Stanford CS193P 第二课

    斯坦福大学IOS教程:Stanford CS193P 第二课 网易教程上的PDF文档,希望对大家有用

    斯坦福ios7公开课纸牌源码(stanford ios7)

    3. **Model-View-Controller(MVC)架构**:iOS应用通常遵循MVC设计模式,源码会展示模型(Model)如何存储和管理数据,视图(View)如何显示内容,以及控制器(Controller)如何协调它们之间的交互。 4. **Game...

    斯坦福大学IOS教程:Stanford CS193P 第三课

    斯坦福大学IOS教程:Stanford CS193P 第三课 网易教程上的PDF文档,希望对大家有用

    Stanford iOS开发pdf1

    ### 斯坦福大学iOS开发课程 第一节课全部keynote #### 课程概览 **斯坦福大学iOS开发课程**是一门专为那些希望深入了解iOS应用程序开发的学生设计的专业课程。本课程不仅涵盖基本的编程概念,还深入探讨了...

    斯坦福大学公开课:ios7应用开发第六讲Attributor实现多MVC和选项卡源码

    【标题】"斯坦福大学公开课:ios7应用开发第六讲Attributor实现多MVC和选项卡源码"涉及的关键知识点主要包括iOS应用开发、Objective-C编程语言、MVC设计模式、选项卡界面(Tab Bar Interface)的实现以及Stanford大学...

    Stanford ios7源码

    在iOS应用开发领域,斯坦福大学的公开课一直备受开发者们的推崇,尤其是iOS 7的开发课程,它深入浅出地讲解了苹果移动平台上的软件构建技术。这份"Stanford iOS 7源码"集合了课程中的所有作业源码,为学习者提供了...

    斯坦福大学iOS开发教程2011年秋Lecture 9

    斯坦福大学iOS开发教程2011年秋季的第九讲主要聚焦于UITableView的深度解析与应用,这是一个在iOS开发中至关重要的组件,用于展示数据列表或表格。此课程详细介绍了UITableView的各种特性和如何利用它来构建高效且...

    stanford ios开发教程

    斯坦福大学iOS开发教程是一系列深入且系统的教育资源,旨在帮助开发者掌握Apple的移动平台iOS的开发技术。这个教程由世界知名学府斯坦福大学提供,通常会在Xcode环境下进行教学,Xcode是Apple官方的集成开发环境...

    iOS7应用开发Machismo(Stanford iOS7)第三节课课堂代码 Swift实现

    本课程第三节课的重点是使用Swift编程语言实现Machismo项目,它可能涵盖了一系列与iOS应用开发相关的概念和技术。 Swift作为Apple的现代编程语言,以其简洁、安全和高性能的特点深受开发者喜爱。在本节课中,学生将...

    stanford_2011fall_ios5_assignment1

    【标题】"Stanford 2011秋季iOS5作业1"是斯坦福大学2011年秋季学期iOS开发课程的一部分,旨在教授学生如何利用iOS 5 SDK进行应用程序开发。这个作业集涵盖了iOS开发的基础知识,同时也包含了额外的加分任务,以挑战...

    Stanford斯坦福大学公开课:ios10应用开发 中英文字幕

    ### 一、Stanford斯坦福大学公开课:iOS10应用开发 #### 1. 课程背景与意义 - **斯坦福大学**作为全球顶尖的高等教育机构之一,在计算机科学领域拥有极高的声誉。 - 本课程主要面向希望学习或提高iOS应用开发技能的...

    Stanford斯坦福大学公开课:ios10应用开发 中英文字幕()

    ### 一、Stanford斯坦福大学公开课:iOS10应用开发 #### 1.1 公开课背景与意义 斯坦福大学作为全球顶尖学府之一,在计算机科学领域拥有极高的声誉。该校提供的iOS应用开发课程,不仅面向在校学生,也向全球开放,...

    斯坦福大学iOS开发教程2011年秋Lecture 10

    标题与描述:斯坦福大学iOS开发教程2011年秋季第10讲,主要讲解了iOS应用开发中的几个核心概念和技术,包括UITabBarController、UINavigationItem以及Objective-C中的Blocks特性。 ### UITabBarController ...

    iOS7应用开发 assignment 3源代码(Stanford iOS7

    【标题】iOS7应用开发 assignment 3源代码(Stanford iOS7) 这篇资源是斯坦福大学iOS7应用开发课程的第三部分作业的源代码。这个项目对于初学者来说是一个宝贵的参考资料,因为它展示了如何在实际环境中应用iOS...

    斯坦福大学iOS应用开发课件的源码

    4. **Model-View-Controller (MVC)架构**:iOS开发中广泛采用MVC设计模式,它将应用程序分为模型(数据)、视图(用户界面)和控制器(协调两者)三个部分,有助于提高代码的可读性和可维护性。 5. **Auto Layout与...

    斯坦福ios8公开课所有源代码下载

    【标题】"斯坦福ios8公开课所有源代码下载"揭示了这是一份源自斯坦福大学公开课程CS193P的iOS 8开发相关的源代码集合。这门课程主要教授如何使用Apple的Swift编程语言来构建iOS应用。通过下载这些源代码,学习者可以...

    斯坦福 iOS7应用开发 assignment 2源代码(Stanford iOS7)

    9. **MVC模式**:Model-View-Controller(MVC)是iOS开发中的常见设计模式,有助于保持代码的清晰结构。在Assignment 2中,模型可能包含游戏规则和状态,视图负责显示,控制器处理用户输入和业务逻辑。 10. **编程...

    stanford_2011fall_ios5_assignment2

    在2011年秋季,斯坦福大学开设了一门关于iOS开发的课程,其中的第二份作业(Assignment2)旨在深化学生对iOS 5 SDK的理解与应用。这份作业涵盖了一系列的重要知识点,包括Objective-C编程、UIKit框架、用户界面设计...

    iOS7应用开发Machismo(Stanford iOS7)Assignment2 Swift

    【iOS7应用开发Machismo(Stanford iOS7)Assignment2 Swift】是斯坦福大学iOS7课程中的一个项目,旨在帮助学生深入理解Swift编程语言以及iOS应用开发的关键概念。在这个作业中,学生将通过实现Machismo应用来探索...

Global site tag (gtag.js) - Google Analytics