错误类型列举
错误类型A:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
错误类型B:EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe)
错误类型C:signal SIGABRT(this class is not key value coding-compliant for the key XXXX)
发生情形
错误使用01
误以为变量溢出后会截断(然而并没有,只会报错)
举例
var a: UInt8 = 0x80
a += UInt8(0x01)
a += UInt8(0x80) // error:a == 0x101;UInt8溢出
报错
类型A/类型B
推荐做法
var a: UInt8 = 0x80
var b: Int = Int(a)
b += 0x01
b += 0x80
a = UInt8(b & 0xFF) // 取Int的低8位,可防止溢出
评价:
与常见的语言特性不同,极易混淆,大坑级错误。
错误使用02
删除或修改了@IBOutlet变量,但没有同步删除或修改@IBOutlet链接关系
举例
从storyboard上“ctrl-拖拽”了一个Outlet:
@IBOutlet weak var imageTest: UIImageView!
然后删除了该行代码
或者将其修改为
@IBOutlet weak var imageTestttt: UIImageView!
报错
类型C
推荐做法
在storyboard上寻中之前的imageView,然后在连接检查窗口中所对应的引用删除。
评价:
习惯用代码开发UI的同学易犯,头次接触该错误的同学往往好无头绪,入门级错误。