Swift使用willMoveToSuperview管理KVO
通过视图的 willMoveToSuperview
方法来管理 KVO,算是个挺实用的小技巧,尤其在你不想手动到处 add/remove 的时候。
用 UIView 的生命周期来自动绑定和解绑观察者,能让你省不少心。你只需要在视图即将添加或移除父视图的时候 KVO 注册和注销,响应也快,代码也清爽不少。
像下面这样写,逻辑就蛮清楚的:
override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
if newSuperview != nil {
self.addObserver(self, forKeyPath: "someProperty", options: .new, context: nil)
} else {
self.removeObserver(self, forKeyPath: "someProperty")
}
}
,KVO 在 Swift 里本身就不是那么直觉,主要是类型安全比较严格,稍不注意就容易崩。你要记得配合使用 context
来避免观察者冲突,还要注意别漏了注销,不然内存泄露跑不了。
想看具体例子的话,可以顺手翻下Swift KVO 使用案例这篇,代码比较干净,新手看也不难懂。
如果你项目里有用到模型驱动 UI、动画联动或者状态监听,KVO 还是挺好用的。要是你对 Combine 比较熟,也可以考虑换成那一套,更 Swifty 一点。
,如果你有自定义视图组件,想省事又不想放弃 KVO,这种写法还挺值得一试的。
swift-通过willMoveToSuperview的无忧的使用KVO.zip
预估大小:27个文件
KVO-Demo-master
文件夹
.gitignore
1KB
willMoveToSuperview的使用UITests
文件夹
willMoveToSuperview___UITests.m
1KB
Info.plist
701B
LICENSE
1KB
.DS_Store
6KB
README.md
2KB
willMoveToSuperview的使用
文件夹
main.m
347B
41.67KB
文件大小:
评论区