每一次抬起手看Apple Watch,发现我第一眼瞄的是电量!并不是时间!!
Apple Watch性能有点不理想,App启动速度有点慢,使用体验不是很理想。针对Apple Watch性能优化,分享以下几点心得:
1、减少通讯量&只更新需要变化的内容。WatchKit扩展应用开发目前面临的一个很大麻烦就是UI组件的状态都是可写而不可读的,这样每次刷新界面内容时很难判断哪些是变动的数据而不得不把屏幕上所有内容都更新一遍。我的做法是使用视图模型的存储可以减少通信量和实现仅更新变化对象的数据。判断原始内容是否和新内容一致。比如对于标签控件WKInterfaceLabel,利用以下代码可以实现仅当标签文本发生变化时才更新标签内容。
protocol Updatable {
typealias T
func updateFrom(oldValue : T?, to newValue : T?)
}
extension WKInterfaceLabel : Updatable {
//WKInterfaceLabel 可以实现读取表格后续数据行直接在表格后附加
func updateFrom(oldValue:String?, to newValue:String?){
if newValue != oldValue {
self.setText(newValue)
}
}
}
2、延迟加载。为了优化Watch App的启动速度和响应能力,我们的程序设计上需要考虑初始化时只加载本屏显示的内容,滚屏显示的额外内容延迟加载。而使用dispatch_async异步方式去处理耗时长的界面图像元素加载等任务将能够更快的提前呈现视图控制器。大致代码结构如下:
override func willActivate() { super.willActivate() dispatch_async(dispatch_get_main_queue(), { //加载界面的图像元素等长时间操作 }) }
3、初始化分页控制器。在使用多页视图模式时一定要特别注意,各页的控制器的init和awakeWithContext会比第一页控制器的willActivate更早执行,因此每页的数据加载等长时间任务有必要放到willActivate函数里运行。
4、其它补充。在某些场景中,我们会使用到提示功能,可能会在控制器里放置一个隐藏的标签等等。但如果这个标签数量太多,也会严重影响视图加载速度。
文章中难免有一些不足之处,欢迎批评指正,我将在批评中不断的成长,谢谢各位!