Є дві ситуації:
Можливо, що об’єкт є [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]
об'єктів.