【发布时间】:2014-05-25 18:30:22
【问题描述】:
我在这里看到很多关于 Stack Overflow 的帖子,警告 Objective-C 用户不将对象与 == 运算符进行比较。例如,始终建议不要使用以下内容。
if (string1 == string2) {} // string1 and string2 are both of type NSString *
我理解这个警告是因为== 运算符在这种情况下检查指针是否相等,而不是string1 和string2 的实际值。如果是这种情况,为什么我经常看到人们使用== 运算符将他们的对象与nil 进行比较。例如,我已经多次看到以下内容。
if (obj == nil) {} // obj is of type id, or any other object
如果将指针与== 运算符比较在NSStrings(或NSNumbers 或NSArrays 等)上是不好的做法,那么为什么nil 如此普遍。
这是标准吗,因为只有一种类型的 nil,即:nil 总是等于 nil?
为什么使用== 运算符的直接比较对象在对象之间不受欢迎,但在与nil 比较时却忽略了?
感谢您的宝贵时间。
【问题讨论】:
-
不是你不应该比较指针,而是人们经常没有意识到它不是在做内容比较。如果您确实需要测试对象身份,当然可以使用
==:if( objectIJustGotOutOfDataStructure == objectIAlreadyHave ){ //... -
@JoshCaswell 好点,我同意大多数人只是在尝试(错误地)比较字符串中的值时使用
==,而没有意识到他们正在执行指针相等测试. -
这就是我要说的;警告就是这样,而不是一般使用
==。 -
两种相等性检查都有用处,理解差异比概括并说你应该总是以某种方式做更好。
标签: objective-c object nullable null