Here are some notes from Mattt excellent write up on nil / Nil and Null.
Read the full post here.

Read more here

C represents nothing as 0 for primitives, NULL, for pointers.

Objective-C nothing is nil. nil is an object pointer to nothing.Although semantically distinct from NULL, they are technically equivalent to one another.

On the framework level, Foundation defines NSNull, which defines a class method +null, which defines the singleton NSNull object. NSNull is different from nil or NULL, in that it is an actual object, rather than a zero value.

Foundation/NSObjcCRuntime.h also defines Nil as a class pointer to nothing. This lesser-known title-case cousin of nil doesn’t show up much very often, but it’s at least worth nothing.

Newly alloc’d NSObjects start life off with their contents set to 0. This means that all points that object has to other points bigs as nil.

Most notable behavior of nil, though, is that is can have messages sent to it. This would crash other programs in C++. Which greatly simplifies expressions, as it obviates the need to check for nil before doing anything.