【问题标题】:Difference between isEqualTo: and isEqual:isEqualTo: 和 isEqual 之间的区别:
【发布时间】:2011-10-29 03:05:32
【问题描述】:

这些方法到底有什么区别?

【问题讨论】:

标签: objective-c cocoa methods


【解决方案1】:

isEqualTo:NSComparisonMethods 非正式协议的一部分,该协议还包含isGreaterThan:isNotEqualTo: 等方法,用于脚本支持。并且:

如果发送到同一对象的 isEqualTo: 消息返回 YES,则 NSObject 提供的此方法的默认实现返回 YES。

因此,当将此消息发送到 NSObject(或任何不覆盖它的子类)时,您将获得与 isEqual: 相同的行为,但是,您应该改用 isEqual:

【讨论】:

  • isEqualTo: 的文档并没有说它等同于isEqual:;它说这相当于将isEqualTo: 发送给另一个对象。它实际上并没有承诺使用isEqual:,尽管我很确定它确实如此。 (不过,直接使用isEqual: 更安全。)isEqualTo: 不仅仅是“通常用于脚本支持”:整个协议存在 用于脚本支持。它通常用于非脚本目的,其中isEqual: 是更合适的方法。
  • 确实说默认实现使用isEqual:
  • 再读一遍。它说它使用-isEqualTo:。 ;) 虽然我认为这只是一个错字。
【解决方案2】:

isEqual: 是 NSObject 协议的一部分,用于比较对象。

isEqualTo: 是 Cocoa AppleScript 支持基础设施的一部分(具体来说,NSComparisonMethods,它允许 AppleScript 比较 Cocoa 对象)。它通常与isEqual: 相同,但如果您希望相等在内部和脚本中以不同方式工作,则可以覆盖它。

【讨论】:

  • 真是个陷阱 :( 我不小心覆盖了isEqual(to:),并且测试失败了,我花了一段时间才发现。
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
  • 2010-10-28
  • 2015-10-04
相关资源
最近更新 更多