程序员的自我修养

今天在GitBooks发现了一本有意思的书,叫程序员的自我修养。瞬间被这个名字吸引。点开后发现果然干货满满。各个都是必备知识点。

下面就整理一下些自己需要的部分吧。

数据结构

专项部分,单独整理

算法基础

专项部分,单独整理

正则表达式

专项部分,单独整理

设计模式 - iOS常用设计模式

单例模式

iOS开发中常用单例模式,用于全局访问的实例。一般是DataEnvironment等保存全局数据状态的实例。

委托模式

委托模式通俗来说是委托别人替他做事。委托者和被委托者之间有相应的协议,协议表明被委托者能具体做什么。然后委托者委托被委托者为他完成某件事并反馈效果给委托者,委托者并不需要知道被委托者到底如何去完成这件事,只需要知道结果。

观察者模式

观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,Cocoa Touch框架中有具体应用有 - 通知(Notification)和KVO(Key Value ObserVing)两种机制。

通知

通知跟委托不同之处有两个

  1. 通知一对多,委托一对一。
  2. 通知不知道接受者具体是谁,委托则知道委托者是谁。

通知是通过向NSNotificationCenter添加观察者(addObserver)和发送通知(postNotification)实现。

KVO

KVO不像通知那样通过一通知中心通知所有观察者,而使在对象属性发生变化时通知直接发送给观察者对象。

MVC

MVC是iOS设计最常见的设计模式-Model-View-Controller,不过随着项目的复杂化,MVC中的Controller可能会变得异常复杂。相关讨论也很多,推荐阅读iOS Architecture Patterns Demystifying MVC, MVP, MVVM and VIPER

面向对象编程

面向对象这个概念是我今年二月开始学习iOS时才接触到的。之前在学校一直接触单片机,汇编等,长期呗面向过程熏陶。有点思维定型了。
面向对象编程三大特性有:封装,继承和多态。

封装

封装,即把内容封装在某个地方,再去调用封装在某处的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Dog {
func eat() {
print("Eating")
}
func bark() {
print("Barking")
}
}
let jer = Dog()
jer.eat() //输出"Eating"
jer.bark() //输出"Barking"

继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
例如:
  猫可以:喵喵叫、吃、喝、拉、撒
  狗可以:汪汪叫、吃、喝、拉、撒

吃、喝、拉、撒是猫和狗都具有的功能,而我们却分别的猫和狗的类中编写了两次。如果使用继承的思想,如下实现:
  动物:吃、喝、拉、撒
  猫:喵喵叫(猫继承动物的功能)
  狗:汪汪叫(狗继承动物的功能)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Animal {
func eat() {
print("Eating")
}
func drink() {
print("Drink")
}
func shit() {
print("Shit")
}
func pee() {
print("Pee")
}
}
class Cat:Animal {
func cry() {
print("喵喵喵")
}
}
class Dog:Animal {
func cry() {
print("汪汪汪")
}
}

多态

多态(polymorphism),是面向对象编程的核心概念之一。指接口可以有多种不同的实现方式,并且可以在运行时替换具有相同接口的对象。

1
2
3
4
5
6
7
8
9
10
11
12
class Cat:Animal {
func cry() {
print("喵喵喵")
}
}
class specialCat:Cat {
// 重写父类的cry方法
override func cry() {
print("喵~~~~~~~~~~~~")
}
}