1>iOS系统分层

  1.Core OS

  • 核心操作系统层,很接近硬件的一层;
  • 本质是一个Unix内核,使用基于BSD的Unix版本,拥有文件系统、套接字、权限等一系列Unix所具有的特性,并且还具备一些特别应用于移动设备的东西,例如电源管理、用于安全管理的钥匙串访问;
  • 大多数API是使用C语言写的; 

  2.Core Service

  • 核心服务层,这是之上的面向对象的一层,这能让你总能在面向对象的层上进行编程;
  • 这一层拥有数组、字典、字符串对象等等;并且还有面向对象的方式来访问文件系统;拥有多线程操作;
  • 这一层是面向对象的; 

  3.Media

  • 媒体层包括OpenAL、PDF、Core Animation、OpenGL ES等等;

  4.Cocoa Touch

  • 触控应用层,这是UI层;包括Controls、Multi-Touch等等;

2>MVC架构

MVC,模型(Model)、视图(View)、控制器(Controller),也就是一种将应用中的所有类组织起来的策略;我们将所有的类归为三种类型:模型、视图、控制器;如何知道哪个类属于哪一类型呢?

  • 模型定义了程序是“什么”的问题;譬如一个纸牌匹配游戏,纸牌、牌堆、甚至玩法的逻辑都是独立于UI并且存在模型当中的;
  • 控制器实现将模型当中的数据显示到屏幕上;纸牌如何抽取到屏幕上是控制器的工作,控制器的任务就是弄清楚如何将这些牌显示到屏幕上;
  • 视图则是控制器的“仆从“,是控制器需要使用的类,视图中的东西会被用于构建UI,直接与用户交互;

MVC之间是如何通信的呢?

  • 控制器访问模型:控制器访问模型能够完全地、不受限地访问,能够按照任何方式使用模型的公共API;

  • 控制器访问视图:同样是完全不受限地,因为控制器需要随意使唤自己的”仆从“,并且我们定义这样一个属性:Outlet,当控制器指向视图时,我们将该指针称为Outlet;

  • 模型与视图相互访问:MVC建议我们避免这样访问;模型应该是完全独立与UI的,它绝对不能同视图这一块中的对象进行沟通;同时UI对象应该是通用的,它们无法同任何特定的模型进行通信,它们需要控制器来为它们解释模型;

  • 视图访问控制器:因为视图对象是通用的,它们不能对控制器知道得太多;视图只能以一种”盲“的方式同控制器进行通信,它们不应知道控制器的类;这里需要结构化的通信方式:一种叫做目标动作,控制器在自己身上设置一个目标,它会提供一个动作给视图,当有人触发了视图的特定事件,则发送该动作给控制器;还有更多复杂的情况,譬如视图发生了will、should、did等事件,这些事件视图自身没有足够的逻辑去处理,需要将这些复杂事件委托给控制器去完成,即委托协议(协议是一种同另一对象进行通信的盲方式);最后是数据源,因为视图不应该拥有其所显示的数据,它只在自身开辟出供显示数据所需要的空间,但它并不关心这些数据究竟是什么;

  • 模型访问控制器:这同样是不允许的,但有时候模型中的事物会变化,控制器需要知道它,这种通信如何做到呢?这可以通过一种电台的概念来理解,模型会将自身发生变化的消息广播出去,任何对其感兴趣的对象都可以收到,iOS将这种机制叫做通知(Notification)和键值观察(KVO);

MVC架构之间可以进行组合,通过这种组合实现更大、更复杂的APP;

CS193P学习笔记(一)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. .Net 自定义应用程序配置

    .Net 自定义应用程序配置 引言 几乎所有的应用程序都离不开配置,有时候我们会将配置信息存在数据库中(例如大家可能常会见到名为Config这样的表):更多时候,我们会将配置写在Web.config或 ...

  2. 利用mciSendString播放音频

    最近在写音频播放器,不过有点懒散,开发进度很慢,一天只做了一点点东西.其实就是让程序能播放音频.这个在我大二学winform程序开发时书上有说,那是书上教的是用media player的COM组件,而 ...

  3. ExtJs4 笔记(4) Ext.XTemplate 模板

    ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...

  4. u-boot移植总结(一)start.S分析

    本次移植u-boot-2010.09是基于S3C2440的FL440板子,板子自带NANDFLASH而没有NORFLASH,所以在U-BOOT启动的过程中必须实现从NANDFLASH到SDRAM的重定 ...

  5. AC自动机---病毒侵袭持续中

    HDU 3065 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/C Description 小t ...

  6. 泛函编程(14)-try to map them all

    虽然明白泛函编程风格中最重要的就是对一个管子里的元素进行操作.这个管子就是这么一个东西:F[A],我们说F是一个针对元素A的高阶类型,其实F就是一个装载A类型元素的管子,A类型是相对低阶,或者说是基础 ...

  7. java中使用 正则 抓取邮箱

    我们来抓取豆瓣网的邮箱吧!把这个页面的所有邮箱都抓取下来 如https://www.douban.com/group/topic/8845032/: 代码如下: package cn.zhangzon ...

  8. Fresco

    1.简介 Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络.本地存储和本地资源中加载图片.相对于ImageLoader,拥有更快的图片下载速度以及可 ...

  9. 安装多JDK后,java编译环境和运行环境版本(JDK版本) 不一致解决:

    由于之前安装过JDK1.7 ,现在一个项目是JDK1.5的,那么需要更改了环境变量了,此处不再赘述如何设置JDK 的环境变量了.然后网上找来方法: 在安装多个jdk后,出现了java -version ...

  10. 解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01

    操作系统Windows Server 2008 X64,数据库SQL Server 2008 X64,Office 2007(好像只有32位),在存储过程执行OpenDatasource导入Acces ...