Есть две ситуации:
Возможно, что объект есть [NSNull null], или это невозможно.
Ваше приложение обычно не должно использовать [NSNull null];вас, используйте его, только если вы хотите поместить « нулевой » объект в массив или использовать его в качестве значения словаря. И тогда вы должны знать, какие массивы или словари могут содержать нулевые значения, а какие нет.
Если вы считаете, что массив никогда не содержит [NSNull null]значений, не проверяйте его. Если есть [NSNull null], вы можете получить исключение, но это нормально: исключения Objective-C указывают на ошибки программирования. И у вас есть программная ошибка, которую нужно исправить, изменив некоторый код.
Если объект может быть [NSNull null], то вы проверяете это довольно просто путем тестирования
(object == [NSNull null]). Вызов isEqualили проверка класса объекта - нонсенс. Есть только один [NSNull null]объект, и простой старый оператор C проверяет его в порядке, самым простым и эффективным способом.
Если вы проверяете NSStringобъект, который не может быть [NSNull null](потому что вы знаете, что он не может быть [NSNull null]или потому что вы только что проверили, что он отличается от этого [NSNull null], то вам нужно спросить себя, как вы хотите обрабатывать пустую строку, то есть ту, которая имеет длину 0. Если вы обрабатывать это как nullстроку nil, затем test (object.length == 0). object.length вернет 0 если object == nil, так что этот тест охватывает ноль объектов и строк длиной 0. Если вы обрабатываете строку длиной 0, отличную от нулевой строки, просто проверьте, если object == nil.
Наконец, если вы хотите добавить строку в массив или словарь, и строка может быть nil, у вас есть выбор не добавлять ее, заменять ее @""или заменять ее [NSNull null]. Замена его @""означает, что вы теряете способность различать «без строки» и «строка длины 0». Замена его [NSNull null]означает, что вы должны писать код при доступе к массиву или словарю, который проверяет [NSNull null]объекты.