MVVM 架构模式

MVVM 架构模式,从字面意思来理解,MVVM 即 Modal View ViewModel(模型 视图 视图模型)。MVC 是一个用来组织代码的权威范式,也是构建 iOS App 的标准模式。Apple 甚至是这么说的。在 MVC 下,所有的对象被归类为一个 model,一个 view,或一个 controller。Model 持有数据,View 显示与用户交互的界面,而 View Controller 调解 Model 和 View 之间的交互。

MVP 架构模式

MVP 架构模式,从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景。MVP 的协调器 Presenter 并没有对 ViewController 的生命周期做任何改变,因此 View 可以很容易的被模拟出来。在 Presenter 中根本没有和布局有关的代码,但是它却负责更新 View 的数据和状态。MVC 和 MVP 的区别就是,在 MVP 中 M 和 V 没有直接通信。

MVC 架构模式

MVC 架构模式,从字面意思来理解,MVC 即 Modal View Controller(模型 视图 控制器),是 Xerox PARC 在 20 世纪 80 年代为编程语言 Smalltalk-80 发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中。其用意在于将数据与视图分离开来。在 iOS 开发中 MVC 的机制被使用的淋漓尽致,充分理解 iOS 的 MVC 模式,有助于我们程序的组织合理性。

KVO 键值观察

KVO 键值观察,KVO 是 Key-Value Observing 的简写,是键值观察的意思,属于 runtime 方法。Key Value Observing 顾名思义就是一种 observer 模式用于监听属性变量值的变化,也是运行时的方法,当实例变量改变时,系统会自动采取一些动作。

Notification 通知

Notification 通知,通知中心实际上是在程序内部提供了消息广播的一种机制,它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。每一个 iOS 程序(即每一个进程)都有一个自己的通知中心,即 NSNotificationCenter 对象,该对象采用单例设计模式,可以通过类方法 defaultCenter 获得当前进程唯一的通知中心对象。

Block 代码块

Block 代码块,Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递。Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。Block 是 C 语言的,类似于一个匿名函数,它和传统的函数指针很类似,但是 Block 是 inline(内联函数)的,并且默认情况下它对局部变量是只读的。

KVC 键值编码

KVC 键值编码,KVC 是 Key-Value Coding 的简写,是键值编码的意思,属于 runtime 方法。Key Value Coding 是 cocoa 的一个标准组成部分,是间接给对象属性设置数值的方法,它能让我们可以通过 name(key) 的方式访问属性变量, 不必调用明确的属性访问方法, 如我们有个属性变量叫做 foo, 我们可以 foo 直接访问它,同样我们也可以用 KVC 来完成 [Object valueForKey:@“foo”], 这样做主要的好处就是来减少我们的代码量。

Threads 多线程

Threads 多线程,进程是指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。线程是进程中执行任务的基本执行单元。一个进程要执行任务,必须得有线程,一个进程(程序)的所有任务都在线程中执行。每一个进程至少有一条线程,即主线程。一个进程可以开启多条线程,每条线程可以并发(同时)执行不同的任务。

Copy 拷贝

copy 需要先实现 NSCopying 协议,创建的是不可变副本。mutableCopy 需要实现 NSMutableCopying 协议,创建的是可变副本。浅拷贝 指针拷贝,源对象和副本指向的是同一个对象。对象的引用计数器 +1,其实相当于做了一次 retain 操作。深拷贝 内容拷贝,源对象和副本指向的是两个不同的对象。源对象引用计数器不变,副本计数器设置为 1。

RunTime 运行时

运行时是苹果提供的纯 C 语言的开发库,是一种非常牛逼、开发中经常用到的底层技术。Objective-C 是一门简单的语言,95% 是 C,只是在语言层面上加了些关键字和语法,真正让 Objective-C 如此强大的是它的运行时。它很小但却很强大,它的核心是消息分发。

RunLoop 运行循环/消息循环

运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要。同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结束时,统一将界面的修改渲染出来。点击事件触发结束后立即结束本次运行循环。

Cocoa iOS 开发体系

要想编写成型的产品,需要的不仅仅是语言本身,同时许多库需要协同使用。语言只是产品开发的“胶水”,而框架和上面的这些库才是 iOS 产品的骨架。Swift 语言能够无缝的调用所有库。

Carthage iOS 开源库管理

Carthage 与 CocoaPods 类似,都是用于在 iOS/macOS 环境下管理第三方的工具。Carthage 不会像 CocoaPods 那样创建一个 workspace。而是直接提供了一种去中心化的依赖管理系统,不提供中心化的项目列表,使用者可以自行添加类库,对项目的侵入性也较少。