NSNull равен NSNull

Является ли [[NSNull null] isEqual:[NSNull null]] == ДА?

Как правильно проверить, является ли идентификатор NSNull. Кроме того, если проверка двух коллекций на равенство и оба они содержат NSNull, будут ли они по-прежнему считаться равными?

1 ответ

Решение

Предполагая, что вы имели в виду:

[[NSNull null] isEqual:NSNull]

Нет, NSNull это класс, а не объект. Вы не можете осмысленно сравнить это с [NSNull null], Вы всегда получите один и тот же объект от [NSNull null]Впрочем, это - синглтон. Из документации:

+ (NSNull *)null
Возвращаемое значение
Единственный экземпляр NSNull.

Итак, это означает, что это выражение:

[NSNull null] == [NSNull null]

Всегда возвращается 1, Точно так же:

[[NSNull null] isEqual:[NSNull null]]

Вернусь YES,

Пример:

#include <Foundation/Foundation.h>

int main(void)
{
    @autoreleasepool
    {
        NSLog(@"%d", [[NSNull null] isEqual:[NSNull null]]);
        NSLog(@"%d", [NSNull null] == [NSNull null]);
    }
    return 0;
}

Строительство и запуск:

$ clang example.m -o example -framework Foundation
$ ./example 
2013-08-30 14:56:21.200 example[27901:707] 1
2013-08-30 14:56:21.201 example[27901:707] 1
Другие вопросы по тегам