Є дві ситуації:
Можливо, що об’єкт є [NSNull null], або це неможливо.
Ваша програма, як правило, не повинна використовувати [NSNull null];вас, лише якщо ви хочете помістити " 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, тоді тестуйте (object.length == 0)object.length поверне 0, якщо object == nilцей тест охоплює нульові об'єкти та рядки довжиною 0. Якщо ви обробляєте рядок довжиною 0, відмінний від нульової рядка, просто перевірте, чи є object == nil.
Нарешті, якщо ви хочете додати рядок до масиву чи словника, а рядок може бути нульовим, у вас є вибір не додавати його, а замінювати його @""чи замінювати його [NSNull null]. Замінивши його @""означає, що ви втрачаєте здатність розрізняти "немає рядка" і "рядок довжиною 0". Замінивши його [NSNull null]означає, що вам потрібно писати код під час доступу до масиву чи словника, який перевіряє наявність [NSNull null]об'єктів.