如果object为nil,则显式检入方法返回?

时间:2017-10-09 21:00:07

标签: objective-c

如果我有如下方法:

-(BOOL)shouldResize {
    return _view != nil;
}

其中_view是指向对象的指针,是必要/推荐的显式nil检查,还是仅仅执行:

-(BOOL)shouldResize {
    return _view;
}

我想知道在将指针转换为BOOL时是否会弹出任何奇怪的行为,如下例所示:https://developer.apple.com/documentation/objectivec/bool?language=objc

(我猜你也可以做return !!_view,对吗?)

4 个答案:

答案 0 :(得分:1)

根据平台或体系结构,BOOL可能等同于signed char。因此,return _view并不安全。 _view的实际指针值将被截断为单个字节。即使_view不是nil,该字节很可能为0。在这种情况下,代码在应该为真时返回false。

return _view != nil安全合理。使用return !!_view是正确的,可能适合也可能不适合,具体取决于您团队的编码标准。在某些地方,它是"正常化"的惯用方式。布尔表达式。其他人可能会发现它太聪明了,并且“丑陋的”#34; (如此处的其他答案所示)。

答案 1 :(得分:0)

我更喜欢“return _view!= nil”以提高可读性。该方法返回一个布尔值,所以我更喜欢从方法中的代码中看出这一点。

在你的情况下,第二个选项(return _view)也可以。

“return!_view”我觉得很难看。

答案 2 :(得分:0)

BOOL类型在32位和64位模式下的定义不同,因此行为不同。因此,返回_view而不是_view!= nil是一个错误。

从Swift那里得到一些提示(无论如何你都必须尽快完成)。在Swift中,self.view!= nil将是唯一合法的方式。谢天谢地。

作为一个例子,聪明是多么危险,"返回!_view"不只是丑陋,这是错误的。它与所要求的相反。

答案 3 :(得分:-1)

如果视图为零,只需返回视图即会自动处理。如果它的nil将返回'NO'和'YES'否则。所以shouldResize的第二个版本就足够了。

按照我的说法,最好的做法是进行明确的零检查,以便有清晰的理解,更好的可维护性并避免意外。