所有笔记基本参考这个专栏自己重新梳理了一遍,有所增删。
什么是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.pngCocoa 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来参与,不能坏了规矩。
Objective-C语言介绍
objective-c是c语言的超集,增加了面向对象的部分。
Header File
- .h 文件
-
#import
导入父类 - 包含实例变量,公有接口
-
@property
实现setter和getter方法(不用自己实现)
Implementation File
- .m文件
-
#impor
导入头文件 - 包含私有接口,私有和公有方法实现
- @synthesize 帮助@property实现setter和getter方法,并不会为对象分配存储孔空间,仅仅为对象指针分类存储空间。
其他
- nonatomic: 非原子,不是线程安全,只能在主线程执行
- strong: strong意味者只要我们需要这个对象就不会被清理。weak意味着,即使我们需要,如果没有其他指针指向它,仍然会被清除。
具体语法参考课件能有更加清晰的理解!
网友评论