【问题标题】:How is comparing operator '==' for NSObject [duplicate]如何比较 NSObject 的运算符'==' [重复]
【发布时间】:2014-05-07 21:23:51
【问题描述】:

如何比较运算符“==”与NSObject? 方法-isEqual: 对我来说很好,但是当我使用-isEqual 时,我需要检查对象是否存在。使用 '==' 我不需要检查这个,但我可以在哪里找到它的文档?

【问题讨论】:

  • 你需要比较NSObject还是检查它的存在?
  • “但是我需要检查对象是否存在”是什么意思?
  • == 与指针一起使用时,检查 指针 是否相等。你可以有两个 NSStrings 都表示“ABC”,但比较不相等,因为它们是 不同 具有 不同 地址的对象。
  • @Monolo 我的意思是当我与 -isEqual 方法进行比较时,我需要检查对象是否为空
  • (坦率地说,如果你不理解这种东西,你将会迷失在 Objective-C 中的编程。)

标签: ios objective-c operators nsobject


【解决方案1】:

来自 Apple 文档:

返回一个布尔值,指示接收者和 给定对象相等。 (必需)此方法定义了它的含义 实例相等。例如,一个容器对象可能 定义两个容器相等,如果它们对应的对象都是 对 isEqual: 请求响应 YES。请参阅 NSData、NSDictionary、 NSArray 和 NSString 类规范的使用示例 这种方法。如果两个对象相等,则它们必须具有相同的哈希 价值。如果您定义,最后一点尤其重要 isEqual:在子类中并打算放置该子类的实例 成一个集合。确保你还在你的子类中定义了 hash。

如果你喜欢这个

if([obj1 isEqual:obj2])

obj1,或者obj2nil,那么你会得到NO。 (如果这是您的问题的意思)
- 现在

if(obj1 == obj2)

这是一个指针比较。 Pointers

【讨论】:

  • 谢谢,我不明白这一点,为什么当我比较 2 个 NSString-s 或 NSArray-s 时返回 YES。这解释了原因。
【解决方案2】:

== 运算符测试两个表达式是否是指向同一个对象的相同指针。 Cocoa 将这种关系称为“相同”

要测试两个对象是否相等,您可以向其中一个对象发送一个 isEqual:

【讨论】:

  • 这个我知道,但是为什么 2 个不同的 NSString 对象可以与 == 运算符相等?这是一个问题。
  • 只是因为:NSString *stringA=@"abc"; NSString *stringB=stringA; if (stringA==stringB) {NSLog(@"==");}
  • 虽然我确定@ArmandDOHM 的答案是问题想要知道的,但可能值得注意的是,在给出的示例中 stringA 和 stringB 都指向同一个 NSString 对象。两个不同的 NSString 对象不能与 '==' 运算符相等。
  • 我认为你没有认真对待我的回答@igor Bidiniuc
  • @Maximus,我现在检查了,是的,你是对的
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 2011-03-10
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2015-07-04
相关资源
最近更新 更多