當我使用此代碼:爲什麼nilObject isEqual nilObject返回否?
NSString *a = nil;
NSString *b = nil;
if([a isEqual:b]){
NSLog(@"YES");
}
else{
NSLog(@"NO");
}
控制檯打印「NO」我不理解這種行爲。你能解釋我嗎?是
當我使用此代碼:爲什麼nilObject isEqual nilObject返回否?
NSString *a = nil;
NSString *b = nil;
if([a isEqual:b]){
NSLog(@"YES");
}
else{
NSLog(@"NO");
}
控制檯打印「NO」我不理解這種行爲。你能解釋我嗎?是
將消息發送到nil
的規則如下:
sizeof(void*)
的任何整數標量, float
,double
,long double
或long long
,則發送到nil
的消息返回0
。struct
,如由Mac OS X ABI Function Call Guide定義爲在寄存器被返回,則消息中的struct
發送到nil
返回0.0
每個字段。其他struct
數據類型將不會填入零。nil
的消息的返回值未定義。(感謝@Jim)
因此,舉例來說,如果你這樣做:
if(![nil someMessageThatAlwaysReturnsTrue]) {
NSLog(@"Watch this.");
}
它會打印出每次 「這塊表」。
[a isEqual:b]
究竟是什麼意思?
這意味着,請將isEqual
消息與參數b
一起發送到對象a
。
併發送任何消息到nil
對象返回nil
。這是錯誤的(否)。
請參閱Sending Messages to nil 的The Objective-C Programming Language。當您將消息發送到nil
並且該方法返回對象時,表達式計算爲nil
本身,相當於0
,相當於NO
。
這在技術上並非如此。在某些情況下,行爲是不確定的 - 請參閱我答案中的鏈接。當你調用的方法返回一個對象時,總是如此,就像在這種情況下一樣。 – Jim 2012-03-07 13:19:23
@Jim嗯,有趣。 TIL :) – 2012-03-07 13:22:23