Каковы различия между нулевым, нулевым и [nsnull nil]?
-
25-10-2019 - |
Вопрос
У меня такая ошибка - *Заканчивающее приложение из-за исключения Uncement 'nsinvalidargumentException', причина: **-[nscfdictionary initwithobjects: forkeys: count:]: попытка вставить значение NIL в объекты [0] (ключ: поиск) '
Затем я попробовал код ниже
if (Obj == (id)[NSNull null]) //Obj is an id
{
NSLog(@" Obj is (id)[NSNull null]");
}
else if (Obj == nil)
{
NSLog(@"Obj is nil");
}
else if (Obj == NULL)
{
NSLog(@"Obj is NULL");
}
else
{
NSLog(@"Obj is something else");
}
searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];
И я получил сообщение NSLOG как «obj - это нуль».
Но когда я использовал тот же код выше, когда OBJ был NSString, и мое приложение было прекращено из -за значения NIL, я получил сообщение NSLOG как «OBJ IS (ID) [NSNULL NULL]».
Каковы различия между нулевым, нулевым и [nsnull nil]?
Есть ли разные нулевые значения? Если да, как обычно проверять эти нулевые значения?
Спасибо :-)
Решение
NULL
является исходным значением C-стиля, указанному указателю, которое считается, что не указывает на явный адрес. Как правило, это просто означает «unset» или как Сентинельное значение.
char * oldstring = NULL;
nil
Является ли объективная версия того же самого, что применяется к ссылкам на объект obj-c:
NSString * str = nil;
id foo = nil;
Они оба определены как равные нулевым значениям, и хотя вы мог Используйте их взаимозаменяемо, первое видно в основном в OBJ-C для традиционных указателей (например, настройки void *
контекст указатели на нуль) и nil
используется для всех ссылок OBJ-C объектов.
Разница существует, потому что, хотя синтаксис OBJ-C происходит на вершине C, дизайн языка более высокий уровень, и его объектные идентификаторы концептуально не одинаково как просто «указатели». Отсюда и создание специального стража для них.
[NSNull null]
это объект это предназначено использование в некоторых случаях (например, вставка в коллекции), где желаемое значение «не значения», но фактическое nil
не допускается, а объект должен использоваться.
Обратите внимание, что nil
а также NSNull
строка очень аналогично: nil
строка как (null)
, а также NSNull
в качестве <null>
.
Другие советы
[NSNull null]
это обертка для nil
ценность, которую вы хотите вставить в коллекцию, если вы хотите.
NSNULL Класс ссылка.
Вы также можете проверить, если ссылка на объект nil
просто с ==
.
Также nil
определяется как : #define nil NULL
и является объективным C, эквивалентным для C NULL
.
Ноль для указателей объектов
NULL для не указателей
Nsnull null] - это объект для представления «нуля» для использования в тех случаях, когда значения NIL не допускаются (как указано Винсом, как в коллекциях, например, NSArray и NSDictionary)