ios – 观察属性或覆盖setter是否更好?

ios – 观察属性或覆盖setter是否更好?,第1张

概述假设我们有这个CustomButton接口: @interface CustomButton : UIButton @property (nonatomic, assign) CGFloat minWidth;@end 每次更改minWidth时,我们都想再次布局我们的CustomButton.据我所知,我们有两个解决方案: 观察财产的价值 // In -initWithFrame:[ 假设我们有这个Custombutton接口:

@interface Custombutton : UIbutton    @property (nonatomic,assign) CGfloat minWIDth;@end

每次更改minWIDth时,我们都想再次布局我们的Custombutton.据我所知,我们有两个解决方案:

观察财产的价值

// In -initWithFrame:[self addobserver:self forKeyPath:@"minWIDth" options:0 context:nil];// In -observeValueForKeyPath:ofObject:change:context:[self setNeedsLayout];

覆盖minWIDth的setter

// In -setMinWIDth:_minWIDth = minWIDth; // SIDe note: it's an ARC project[self setNeedsLayout];

哪一个是正确的解决方案,为什么?

解决方法 我可以想到三个理由来覆盖setter而不是KVO属性.

1:副作用可能会有所不同

除非您明确需要或想要副作用,否则最小阻力(或本例中的开销)的路径是覆盖设定器. KVO不仅涉及对给定属性的绑定,还涉及观察者在绑定期间将处于活动状态的假设.甚至不要让我开始考虑KVO的调试挑战性!臭名昭着的“NSKVODeallocateBreak断点”足以吓跑任何人.

2:传统智慧

“观察自己”虽然理论上是一个好主意,但要胜过正确而不是超越制定者. KVO在setter之上也是一个额外的(但是最小的)开销量,它只对绑定到其他对象非常有用.此外,如果你把一个类视为一个独立的单元,那么它真的不需要观察它自身的任何属性. Setter精确存在,以便给定的类可以选择对其属性的变化做出反应,甚至拒绝或修改所述更改.

3:我们都很懒

通过观察自己,你现在已经致力于KVO的规则了:即记住以观察者身份移除自己,并实施

-observeValueForKeyPath:ofObject变化:背景:.

相对于手头的任务,这是太多的工作.你为什么要记得做所有这些?

总结

以上是内存溢出为你收集整理的ios – 观察属性或覆盖setter是否更好?全部内容,希望文章能够帮你解决ios – 观察属性或覆盖setter是否更好?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存