2012-03-07 18 views

回答

4

將消息發送到nil的規則如下:

(來源:https://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW7

  • 如果該方法返回任何指針類型,尺寸小於或等於sizeof(void*)的任何整數標量, float,double,long doublelong long,則發送到nil的消息返回0
  • 如果該方法返回一個struct,如由Mac OS X ABI Function Call Guide定義爲在寄存器被返回,則消息中的struct發送到nil返回0.0每個字段。其他struct數據類型將不會填入零。
  • 如果該方法返回上述值類型以外的任何值,則發送到nil的消息的返回值未定義。

(感謝@Jim

因此,舉例來說,如果你這樣做:

if(![nil someMessageThatAlwaysReturnsTrue]) { 
    NSLog(@"Watch this."); 
} 

它會打印出每次 「這塊表」。

+0

這在技術上並非如此。在某些情況下,行爲是不確定的 - 請參閱我答案中的鏈接。當你調用的方法返回一個對象時,總是如此,就像在這種情況下一樣。 – Jim 2012-03-07 13:19:23

+0

@Jim嗯,有趣。 TIL :) – 2012-03-07 13:22:23

1

[a isEqual:b]究竟是什麼意思?

這意味着,請將isEqual消息與參數b一起發送到對象a

併發送任何消息到nil對象返回nil。這是錯誤的(否)。