cfi*_*her 9 null cocoa objective-c
如果你发送isEqual:对于碰巧为零的对象,你总是得不到.
这是预期的行为吗?要成为一个功能而不是一个bug,我希望如果另一个对象也是n,则返回YES,否则返回NO?从语义上讲,这似乎是正确的行为.
如果我的期望不正确,推荐的进展是什么?在发送isEqual :(和朋友)之前检查nil?
Tre*_*kow 14
这是Objective-C的预期行为.这基本上意味着这样做
if ([nil isEqual:nil]) { ... }
Run Code Online (Sandbox Code Playgroud)
评估为NO.即使它没有意义,但在查看它时 - 即使它很烦人 - 能够将消息发送到nil实际上是关于Objective-C的一个非常酷的事情.有时可以为您节省大量代码.
我的解决方案是将这个宏定义在一个方便的地方
#define IsEqual(x,y) ((x && [x isEqual:y]) || (!x && !y))
Run Code Online (Sandbox Code Playgroud)
所以当我需要测试两个对象是否相等时:
if (IsEqual(obj1, obj2)) { ... }
Run Code Online (Sandbox Code Playgroud)
或不相等:
if (!IsEqual(obj1, obj2)) { ... }
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.