I got an error like this -
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: -[NSCFDictionary initWithObjects:forKeys:count:]: attempt to insert nil value at objects[0] (key: searched)'
Then I tried the below code
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"];
And I got the NSLog message as 'Obj is nil'.
But when I used the same above code when Obj was NSString and my app got terminated due to nil value, I got the NSLog message as 'Obj is (id)[NSNull null]'.
What are the differences between nil, NULL and [NSNULL nil] ?
Are there different kinds of Null values? if yes, How to check commonly for these null values?
Thanks :-)
NULL
is the original C-style value given to a pointer which is deemed to point to no explicit address. It's generally just used to mean "unset" or as a sentinel value.
char * oldstring = NULL;
nil
is the Objective-C version of the same thing as applied to Obj-C object references:
NSString * str = nil;
id foo = nil;
They are both defined to be equal to the value zero, and although you could use them interchangeably, the former is seen mainly within Obj-C for traditional pointers (like setting void *
context pointers to NULL) and nil
is used for all Obj-C object references.
The difference exists because although Obj-C's syntax happens to ride on top of C's, the design of the language is higher-level, and its object IDs aren't conceptually the same as just "pointers". Hence the creation of a special sentinel for them.
[NSNull null]
is an object that is intended to be uses in very certain cases (like inserting into collections) where an "non-value" value is desired, but actual nil
is not allowed, and an object must be used.
Note that nil
and NSNull
stringify very similarly: nil
stringifies as (null)
, and NSNull
as <null>
.