美文网首页
CS193p 斯坦福IOS开发 2011 (一)

CS193p 斯坦福IOS开发 2011 (一)

作者: ItchyHiker | 来源:发表于2018-10-08 09:46 被阅读0次

所有笔记基本参考这个专栏自己重新梳理了一遍,有所增删。

什么是IOS

内核

mac OS 操作系统内核是mach 4.x BSD UNIX内核 ,是个多任务的UNIX内核,在这层上提供了网络,socket ,安全机制,文件系统,大部分这些api是c api 没有面向对象,因为这些都是UNIX代码。我们不会在这层上写代码。


Screen Shot 2018-10-07 at 9.58.34 AM.png

Core Sevices层

这层开始面向对象了,提供了很多底层服务。提供语言运行环境支持,比如多线程等。还有集合类,数组,字典啊。可以把这层当做提供了基本面向对象的Core OS的封装。

Screen Shot 2018-10-07 at 9.58.48 AM.png

多媒体层

好像离硬件更远了,其实是还是很近, iPhone iPod iPad都是多媒体设备, 多媒体相关的代码贯彻了整个iOS,在开发者眼中 core services都是多媒体的api。

Screen Shot 2018-10-07 at 9.58.54 AM.png

Cocoa Touch 层

Cocoa是Mac OS的开发环境,Cocoa Touch是IOS的开发环境。我们的 90%时间都用在这层, 按钮,滚动条,各种控件等用户交互界面。

Screen Shot 2018-10-07 at 9.59.01 AM.png

平台组成

  • 工具: XCode
  • 语言: objective-c
  • Framework: Foundation, UIKit, Core Data, Map Kit, Core Motion等
  • 设计模式: MVC(model view controller)

MVC 设计模式

Model

描述你的应用是什么,做什么的。和如何展示没有关系。

Controller

描述应用如何在屏幕上展示,它获取到了飞船在太空中的位置,然后算出来怎么在屏幕上展现出来。比如飞船的多个机枪如何在屏幕上展现。总之controller控制如何在UI上展现model。

View

view是Controller用来展示model的小控件,尽可能是通用的, 如按钮,滚动条等。决不包含如何展示的逻辑。

三者之间的通信

三者之间相互通信一共有6中情况:

controller 到 model

完全允许, controller要从model获取如何在屏幕上展现内容的信息。

controller 到 view

完全允许 。 controller通过outlets属性和来和view通信,在controller里创建outlets传输到view中。

model 到 view

永远不会通信。因为model和UI界面没有关系,view要重用。如果model和view关联的话,model改变之后 view需要重写。

model 到 controller

model不能主动和controller通信,如果model中有内容改变了,需要更新,通过Notifaction & KVO广播机制告知controller。

view 到 model

永远不会通信, 和model到view是一样的。

view 到controller

view和controller通过 target action这个结构来通讯。controller自己画了个 target(目标) ,然后把action(动作)交给view。当view发生一些事情,比如按钮被按下,它把action 发送到target,这时候controller就知道了。view 和controller还有别的通讯机制,比如view要告诉controller发生什么事情 ,将要发生什么事情,或询问是否允许,用到了will did should 。controller把自己设置成委托,用协议来完成委托。来回应will,did,should。这时候,view 不知道回应的controller是哪个类。

那view如何获取数据呢?
通过协议获取,delegation 方法,比如data, at , count. 数据源的delegation永远是controller,不可能是model。
三大阵营的工作流程是这样的:controller去model那取数据,告诉view展现数据在屏幕上。即使只有一行代码,也得有controller来参与,不能坏了规矩。

Screen Shot 2018-10-08 at 9.08.29 AM.png

Objective-C语言介绍

objective-c是c语言的超集,增加了面向对象的部分。

Header File

  • .h 文件
  • #import 导入父类
  • 包含实例变量,公有接口
  • @property实现setter和getter方法(不用自己实现)

Implementation File

  • .m文件
  • #impor 导入头文件
  • 包含私有接口,私有和公有方法实现
  • @synthesize 帮助@property实现setter和getter方法,并不会为对象分配存储孔空间,仅仅为对象指针分类存储空间。

其他

  • nonatomic: 非原子,不是线程安全,只能在主线程执行
  • strong: strong意味者只要我们需要这个对象就不会被清理。weak意味着,即使我们需要,如果没有其他指针指向它,仍然会被清除。

具体语法参考课件能有更加清晰的理解!

相关文章

网友评论

      本文标题:CS193p 斯坦福IOS开发 2011 (一)

      本文链接:https://www.haomeiwen.com/subject/ixzkaftx.html