- Buildtime issues(见下图)有三类:编译器识别出来的警告(Waring),错误(Error),及静态分析(Static Code Analysis),前两者无需赘述,静态分析错误一般有三类,未初始化的变量,未使用的数据和API使用错误等,比如下面这段代码
class SampleViewController: UIViewController {
override func viewDidLoad() {
lrt numList: [Int]
let otherNumList = numList
let anthoerNumList: [Int]?
}
}
这段代码中有三个错误。首先,numList未初始化就赋值给otherNumList, 其次,anotherNumList并未使用,最后,API使用错误,没有调用super.viewDidLoad()方法。
- Runtimes issues有三类问题:线程问题,UI布局和渲染问题以及内存问题。线程的相关问题有很多,最常见的就是数据竞争(data race)。比如下面这段代码:
var balance = 0;
let fullTimeSalary = 1000, partTimeSalary = 1000
DispathQueue.global().async {
for _ in 1...12{
balance += partTimeSalary
}
}
for _ in 1...12 {
balance += fullTimeSalary
}
在这段代码中,两个线程同时对balance进行写操作,谁先写,balance值为多少酒会变成两个线程角力的问题。这种多个线程对同一个值进行写操作的行为就是数据竞争。
UI布局和渲染问题就是诸如尺寸设定没给全或者设定模糊,造成autolayout引擎无法渲染,内存问题常见的就是内存泄漏,比如循环引用就是一个典型的错误。