Когда я использую этот код:
NSString *a = nil; NSString *b = nil; if([a isEqual:b]){ NSLog(@"YES"); } else{ NSLog(@"NO"); }
На консоли выдается «НЕТ». Я не понимаю этого поведения.Не могли бы вы объяснить мне?
См. Отправка сообщений на ноль в Язык программирования Objective-C . Когда вы отправляете сообщение объекту nil и метод возвращает объект, выражение оценивается как nil, что эквивалентно 0, что эквивалентно NO.
nil
0
NO
Правила отправки сообщений на 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 double
long long
struct
0.0
(Спасибо @ Джим )
Так, например, если вы сделаете это:
if(![nil someMessageThatAlwaysReturnsTrue]) { NSLog(@"Watch this."); }
Он будет печатать "Watch this" каждыевремя.
Что означает [a isEqual:b] на самом деле?
[a isEqual:b]
Это значит, отправить сообщение isEqual с параметром b объекту a.
isEqual
b
a
и отправить любоесообщение объекту nil возвращает nil.Что неверно (НЕТ).