几乎所有面相对象的语言都会有nil这样的概念:不指向任何对象的指针。在 Objective-C中,nil是值为0的指针。

  多数面向对象的语言不允许向nil发送消息。所以在发送消息前,必须检查指针是否为nil,从而导致出现大量下面的代码:

if(fido!=nil){

      [fido goGetTheNewsPaper];

      }

  Objective-C则不同。在Objective-C中,可以向nil发送消息,什么事情也不会发生。

  因此,下面这段代码是完全"合法"的:

Dog*fido=nil;

[fido goGetNewsPaper];

  重点1:如果程序向某个对象发送了消息,但却没有得到预期的结果,请检查消息接收方是否为nil。

  重点2:向nil发送消息,得到的返回值没有意义。

 

Eg:

Dog*fido=nil;

Newspaper*daily=[fido goGetNewsPaper];

  在这段代码中,daily的值将为0。通常情况下,如果期望的方法返回值是数字或指针,那么向nil发送消息,得到的返回值为0。

  但是,如果期望的方法返回值是其他类型(例如结构struct),则得到的返回值降无法预期。