【问题标题】:What will happen if my implementation of an setXXX method that perform validation?如果我实现了一个执行验证的 setXXX 方法会发生什么?
【发布时间】:2014-06-07 06:19:09
【问题描述】:

Ensuring KVC Compliance
文件说:

-set<Key>: 方法的实现不应执行验证。 如果验证适用于密钥,您的类应该实现 -validate<Key>:error:

如果我实现了一个执行验证的 setXXX 方法,就会发生这种情况

使用kvo会不会导致性能问题?

【问题讨论】:

  • 如果值无效,你的 setter 会做什么?
  • 这取决于你在“验证”下的意思,如果需要以某种方式通知调用者关于不正确的值,应该实现–validate<key>:error: - 如果设置器可以解决无效值的问题并且调用者不需要被通知,因为这将是“无所事事”,setter 可以完成这项工作。例如nil 是不可接受的,因为 NSString 设置器可以使用 @"" 自动覆盖。它也是一种验证,可以在不涉及调用者的情况下解决,但是文档当然必须提到这种行为。

标签: ios objective-c key-value-observing kvc


【解决方案1】:

如果没有别的,如果 setter 正在进行验证(即,如果验证失败,它没有设置值),当实际没有发生更改时,您最终会收到 KVO 通知通知您更改。 KVO 通知将在您调用 setter 时发布,无论 setter 是否成功执行其功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多