设置 KVO 以监视 init 方法中的属性

发布于 2024-12-12 08:01:56 字数 342 浏览 0 评论 0原文

我有一个包含大量 init... 方法的类 (UITableViewCell)。我的扩展有一个额外的属性,设置后将调整各种单元格属性,例如颜色。我有两种选择来处理财产的变更。

  1. 覆盖属性设置器,存储传递的值,然后设置颜色等。
  2. 覆盖所有 init 并在调用私有方法来设置颜色等的属性上添加 KVO 监视。

项目 #1 似乎是最简单的应用,但这意味着我必须按照苹果的指导方针手动放入设置器代码(涉及保留)。

项目 #2 最初听起来不错,因为我不必添加 setter 锅炉位置,但会花费更多代码,因为我必须重写所有 init。

还有其他选择吗?

I have a class with a large number of init... methods (UITableViewCell). My extension has an extra property which when set, will adjust various cell properties such as colours. I had two options for handling the change to the property.

  1. Override the property setter, store the passed value and then set the colours etc.
  2. Override all the inits and add a KVO watch on the property that calls a private method to setup the colours etc.

Item #1 seems to be the simplest to apply, but means I have to deal with manually putting in the setter code (retains involved) as per Apples guidelines.

Item #2 sounds nice initially because I don't have to add the setter boiler place, but would cost more code because I would have to override all the inits.

Is there any other alternatives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世界等同你 2024-12-19 08:01:56

您只需覆盖 指定的初始化程序)。通常,大多数类只有一个指定的初始值设定项,而符合 的类有两个(第二个是 -initWithCoder:)。

不要忘记,如果您在 init 中设置了 KVO,则必须记住在 -dealloc 中取消注册它。对象在消失时不会自动取消注册 KVO,如果您忘记了,那么将来在同一地址分配的任何对象都将继承泄漏的 KVO 观察者。

You only have to override the designated initializer(s). Typically, most classes only have one designated initializer, and classes which conform to <NSCoding> have two (the second being -initWithCoder:).

Don't forget, if you set up KVO in init, you'll have to remember to unregister it in -dealloc. Objects don't automatically unregister KVO when they go away, and if you forget then whatever object that gets allocated at the same address in the future will inherit the leaked KVO observers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文