Calling a method on an uninitialized object (null pointer)

A message sent to a nil object is perfectly acceptable in Objective-C, it’s treated as a no-op. There is no way to flag it as an error because it’s not an error, in fact it can be a very useful feature of the language.

From the docs:

Sending Messages to nil

In Objective-C, it is valid to send a
message to nil—it simply has no effect
at runtime. There are several patterns
in Cocoa that take advantage of this
fact. The value returned from a
message to nil may also be valid:

  • If the method returns an object, then a message sent to nil returns
    0 (nil), for example:

    Person *motherInLaw = [[aPerson spouse] mother];

    If aPerson’s spouse is nil,
    then mother is sent to nil and the
    method returns nil.

  • If the method returns any pointer type, any integer scalar of size less
    than or equal to sizeof(void*), a
    float, a double, a long double,
    or a long long, then a message sent
    to nil returns 0.

  • If the method returns a struct, as defined by the Mac OS X ABI
    Function Call Guide to be returned in
    registers, then a message sent to
    nil returns 0.0 for every field in
    the data structure. Other struct
    data types will not be filled with
    zeros.

  • If the method returns anything other than the aforementioned value
    types the return value of a message
    sent to nil is undefined.

Leave a Comment