2011斯坦福 iOS 应用开发第一课

组合潮涌
• 阅读 2815

这节课主要讲了两个东西:
1. iOS 概述
2. MVC 讲解

iOS 概述

2011斯坦福 iOS 应用开发第一课

iOS分为四层,最底层为Core OS,是一个Unix内核,也就是Mac OS 10。上层为Core Services,即核心服务层,提供较为面向对象的API,可以把它当成是提供面向对象支持的Core OS的封装。再上一层为Media,提供多媒体API的支持。顶层为Cocoa Touch,我们开发应用时大部分都是在这层上进行。

2011斯坦福 iOS 应用开发第一课

  • MVC包含三个部分(Model,View,Controller)。
  • Model用来储存数据,比如你有个打飞机的应用,那么飞机的飞行高度、有几个机枪、血量、飞行速度等这些数据都是存储在此。要特别注意的是,Model不是用来处理UI的 ,比如飞机在屏幕的哪个位置、飞机的形状是怎样的等等这些有关UI 的都与Model无关。Controller拥有访问Model的所有权限,那么它们之间是如何通信的呢?这就用到了Notification&KVO(通知和关键数据监听)机制,当Model里的数据改变时(例如飞机受伤了导致血量下降),它就通过KVO机制进行广播通信,由于Model是Controller的被观察对象,所以当Model进行广播时,Controller作为观察者就会接收到来自Model的信息,然后再告诉View要进行相应的UI处理。
  • View就像Controller的仆人,它听从Controller的指挥以用来处理UI。它们之间通过outlet进行通信。target,Controller通过创建target接收来自View的action,比如View的控制条被滑动了或者button被点击。View并不了解Controller的任何信息,它只简单的与Controller进行通信,那么它们之间如何进行同步呢?上图中的should、will、did就是用来告诉View应该做的、将要发生的和已经发生的,这么做的原因是Controller把自己设为delegate(委托),这是另一种通信方式。还有一个重要的事是,View并不是它显示的数据的所有者,即View不拥有数据。如果View不拥有数据那么它如何显示数据呢?这就是另一种类似delegate的通信协议,例如上图的data at和count方法。这就可以去查询表中的数据,比如我的iPod有1000首歌,而我的屏幕只能显示其中的10首,View就可以通过需求去请求数据,这非常高效。但不要把这功能写到View中,因为View只显示数据,Controller和Model一起有效的提供数据。类似的,View有一个数据源的设置,即上图的data source,Controller会回应数据。注意:数据源的delegate永远是Controller或Controller设置的第三方,但不可能是Model。Controller的工作是把Model的数据传递给View,响应所有的delegate。Controller获取Model然后显示在屏幕上,Model和View之间不会进行通信,这些工作都有Controller来执行。
点赞
收藏
评论区
推荐文章
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Easter79 Easter79
3年前
SwiftUI 中的 App 要领
作者:倾寒,iOS开发者,目前就职于阿里巴巴,手淘iOS架构组Session:https://developer.apple.com/videos/play/wwdc2020/10037/概述这个主题主要讲述使用SwiftUI构建APP的核心概念。在SwiftUI可以使用Views简洁强大的
Stella981 Stella981
3年前
PhoneGap设置Icon
参考:http://cordova.apache.org/docs/en/latest/config\_ref/images.html通过config.xml中的<icon标签来设置Icon<iconsrc"res/ios/icon.png"platform"ios"width"57"height"57"densi
Stella981 Stella981
3年前
ReactNative运行IOS在Xcode 11.0编译报错
前段时间项目时间紧张,ios端因为pod文件冲突,没有使用ios模拟器开发,今天打算搞一下这个问题。解决过程主要是如下两个步骤:首先删除项目ios目录下的Pods文件夹,然后进入项目的ios文件,执行命令podinstall,等待pod文件安装完成,重新运行模拟器即可。以为这样就完了?我真是TooYoungTooSimple。!
Wesley13 Wesley13
3年前
H5唤醒APP
Android使用iframe唤起,ios采用window.location.href唤起更合适一点。1.ios系统: 在wap中唤起app其实应用最最广泛的并不是UniversalLink,而是直接Schema跳转 window.location.href "taobao://fulushuka.tmall.com/shop/view\_
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Stella981 Stella981
3年前
IOS数据存储之NSUserDefaults
概述数据存储是开发中必不可少的一个功能,我们可以通过Sqlite数据库手动创建数据库,定义数据表;可以使用IOS的数据框架CoreData,更方便的操作数据库;也可以直接读写文件系统;这里将介绍另外一种常用的方法:使用NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这
Wesley13 Wesley13
3年前
IOS开发之支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述。内容大纲:一、常见的支付方案简介二、第三方支付SDK三、苹果官方支付方案四、Web支付方案正文:一、常见的支付方案简介!(http://static.oschina.net/uploads/img/201603/11165221_46C0.p
Easter79 Easter79
3年前
SwiftCommon之Dictionary字典
概述Dictionary类型是IOS开发中用的很多的一种数据类型,通过键值对来保存数据。在Swift中对应Dictionary类型,而IOS的原生库中对应的NSDictionary类,两者是可以相互转换的。SCDictionary使用extension扩展为NSDictionary增加几个常用方法。SCDictionary
Wesley13 Wesley13
3年前
初探 Objective
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言异常处理是许多高级语言都具有的特性,它可以直接中断当前函数并将控制权转交给能够处理异常的函数。不同语言在异常处理的实现上各不相同,本文主要来分析一下ObjectiveC和C这两个语言。为什么要把ObjectiveC和
新支点小玉 新支点小玉
1年前
CNAS资质认证,快速出证,欢迎咨询
!11284(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/4e90dd6f80dd2c80bdd3dc5e7d686a41.jpg)