zoukankan      html  css  js  c++  java
  • CS193P学习笔记(一)

    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;



  • 相关阅读:
    java项目路径获取
    String.getBytes()和new String()(string与byte[]的转换)
    Android生成一维码
    Android PullToRefresh (GridView 下拉刷新上拉加载)
    Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
    Android 二维码扫描框 加四个角及中间横线自动下滑
    android 百度地图定位开发2
    android 百度地图定位开发1
    广播发送者&广播接收者介绍
    电脑配置 eclipse 环境变量
  • 原文地址:https://www.cnblogs.com/zfan/p/3984576.html
Copyright © 2011-2022 走看看