Difference between nil, NIL and, null in Objective-C

34,525

Solution 1

I am not sure but i think nil should only be used in place of an id, what Java and C++ programmers would think of as a pointer to an object. Use NULL for non-object pointers.

nil is usually used for an Objective-C object type, while NULL is used for c-style pointers

Solution 2

Nil,Null and nil are used with below

1> Nil for Objective c Class

2> nil for Objective c object

3> Null for C pointer

Example:

1>Class A=Nil;

2>NSString strName=nil;

3>char *pointerChar = NULL;

Solution 3

Suppose you have a class MyClass then by convention nil is used if you want to initialize its instance to null value (same as null in java) i.e.

MyClass *obj = nil;


and if you want to initialize a primitive pointer to null value (same as in c) you use

int *ptr = NULL; 


and if you want to initialize to Class reference to null value (same as null in java) then use

Class classRefOfMyClass = Nil;

It's just a convention otherwise Nil or nil have same meaning and perhaps NULL , nil or Nil all are same.

Here is the definition for these in objc.h file

#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

And in stddef.h

#define NULL ((void*)0)

And the definition of __DARWIN_NULL in _types.h

#define __DARWIN_NULL ((void *)0)

So there is no difference logically. The main idea here is to initialize a pointer whether C or Objective-C to 0. If you have knowledge of C then you can assign

int *ptr = 0;

without type casting 0 to a pointer. As you don't need to typecast 0 to assign it to a pointer.

In short they all are 0 and nothing else.

Solution 4

This will help you to understand the difference between nil,NIL and null.

All three of these values represent null, or zero pointer, values. The difference is that while NULL represents zero for any pointer, nil is specific to objects (e.g., id) and Nil is specific to class pointers. It should be considered a best practice of sorts to use the right null object in the right circumstance for documentation purposes, even though there is nothing stopping someone from mixing and matching as they go along.

The below link may help you in some way:

http://nshipster.com/nil/

Here is some important part from the link:

enter image description here

Solution 5

nil, NIL and null. is depended on your requirement.

NSNull

collections like NSArray and NSDictionary not being able to contain nil values.

NSMutableDictionary *MymutableDictionary = [NSMutableDictionary dictionary];
MymutableDictionary[@"someKey"] = [NSNull null]; // Sets value of NSNull singleton for "someKey"
NSLog(@"Keys: %@", [mutableDictionary allKeys]);

nil

all pointers that object has to other objects begin as nil, so it's unnecessary to, for instance, set self.(association) = nil in init methods.

In other languages, like C++, this would crash your program, but in Objective-C, invoking a method on nil returns a zero value.

if (name != nil)
{
........
}

Symbol Value Meaning

nil (id)0 literal null value for Objective-C objects

Nil (Class)0 literal null value for Objective-C classes

Share:
34,525
shweta
Author by

shweta

Updated on December 17, 2020

Comments

  • shweta
    shweta over 3 years

    I want to know the difference between nil, NIL and null. I've googled around and found this:

    nil -> null pointer to Objective-C object

    NIL -> null pointer to Objective-C class

    null -> null pointer to primitive type or absence of data

    But I'm not able to understand the terms "Objective-C object" and "class" clearly.

    Please explain this to me. Also, is there any word like NSNull or NSNil in Objective-C? If so, then please explain for what it is for.

  • nielsbot
    nielsbot about 13 years
    This is correct. I think in practice it doesn't really matter which you use. But follow the convention.
  • Victor Zamanian
    Victor Zamanian almost 12 years
    Java's NULL is in lower-case: null
  • David Casseres
    David Casseres about 11 years
    The convention is useful but it's good to know that nil and NULL and Nil are all the same to the compiler.
  • Abhilash Reddy Kallepu
    Abhilash Reddy Kallepu over 9 years
    elegant example buddy