之前有这样一个需求: tableView中的cell要有左划删除功能, 其中的label要根据文字自适应宽度,
一开始去将计算宽度放在了 layoutSubviews() 中, 导致cell在删除时页面出现错乱的情况, 而且
计算量非常大, 性能比较低(在左划删除时不停在计算宽度),所以就想到了使用didSet(willSet)
didSet 与 willSet 被称为属性观察器, 其本质也是闭包.
属性观察器的特点是: 只有在你对该属性进行了赋值操作并且属性值改变的情况下才会执行, 从而减少了计算, 提升了性能. 从而也解决了cell因为重用而带来的界面问题.
注:
如有特殊需求, 比如我们要得到变化前或者变化后的属性值, 可以通过willSet中的newValue(变化后)以didSet中的oldValue(变化前)获取.
网友评论