几乎所有面相对象的语言都会有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),则得到的返回值降无法预期。