向目标c中的nil对象发送消息是否有缺点?

时间:2011-05-04 02:37:19

标签: objective-c

我是一名C ++程序员,在C#中有很多时间。我现在正在Objective C中工作,我想知道,在Objective C中向nil对象发送消息是否有缺点?

例如,我很习惯这样做:

MyClass* c = NULL;
// ...
if( c != NULL ) c->MyMethod();

所以在Objective C中,我发现自己在做:

MyClass* c = nil;
// ...
if( c != nil ) [c MyMethod];

所以我想知道的是,检查零是否有任何好处?如果我尝试向nil发送消息,Objective C是否足够聪明,不会做任何额外的奇怪处理?或者是否有一些隐藏的成本使得值得继续检查nil?

3 个答案:

答案 0 :(得分:4)

在Objective-C中,您不需要检查nil,消息传递nil有效是完全有效的,并且如果返回值是整数,则大多数时间将返回nil或0。如果传递的消息的返回值是float,double或struct,则返回值是未定义的。

答案 1 :(得分:3)

不。这就是Objective-C的美丽。

答案 2 :(得分:2)

只要返回值在该上下文中表示已满,消息传递nil就没有问题。在某些情况下,调试会变得复杂......

“如果方法返回任何指针类型,任何大小小于或等于sizeof(void *)的整数标量,float,double,long double或long long,则发送给nil的消息返回0“(Apple - 链接如下)   - https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html(发送消息为零)。