Swfit 生成的指令的量级整体来看比 OC 多,梳理了一些 Tips 在编码时多留意,能减少一点点指令数量,蚊子腿也是肉。
避免 Swift 去重写 OC 的构造函数
- 会新增 objc_msgSendSuper2 调用父类函数指令;
- 影响该函数的内联,在调用次数少时能减少很多指令;
- Swift 调用 super 若是父类显式定义的,还会新增不少隐式强制转换指令,详情可看:juejin.cn/post/743075...
多用临时变量,减少高成本调用
临时变量直接寄存器实现读写,很多场景都可减少指令。 比如减少函数调用次数、减少实例属性访问次数:
ini
value?.doA()
let a = value?.getB()
let b = value?.getB()
->
guard let value = value else { return }
value.doA()
let a = value.getB()
let b = a
闭包减少外部变量引用
比如使用静态属性取代实例属性:
vbnet
do () { self.key }
->
do () { AnyClass.key }
使用字面量方式初始化容器
css
var dic = [String : Any]()
dic["fileId"] = fileElementId
->
["fileId": fileElementId]
使用字符串插值替代字符串连接
css
let _ = a + b
->
let _ = "\(a)\(b)"
减少分支
kotlin
If (a < 3) { return true } else { return false }
->
return a < 3
sql
return "iPhone9,2" == result || "iPhone9,4" == result || "iPhone10,2" == result || "iPhone10,5" == result
->
return ["iPhone9,2", "iPhone9,4", "iPhone10,2", "iPhone10,5"].contains(result)