0

What is difference between nil and Nil? nil is an uninitialised object, what is about Nil? Thanks!

nicael
  • 18,550
  • 13
  • 57
  • 90
  • 1
    it should help you : http://stackoverflow.com/questions/9578748/iphone-difference-between-nil-vs-nil-and-true-vs-true – Franck Nov 29 '13 at 15:07

3 Answers3

2

It's the zero value for the Class type.

All of NULL, nil, Nil, NUL, '\0', 0, 0L, 0U, 0.0, 0.0f, ... have the same value (at least on sane systems). They just correspond to different types.

And to make this clear: nil is not an "uninitialized object" but the value of an (initialized) variable of object pointer type.

Nikolai Ruhe
  • 81,520
  • 17
  • 180
  • 200
2

nil is an uninitialised object

No, it isn't. It's a pointer-to-object that points nowhere. Uninitialized objects need not be nil.

what is about Nil

It's similar, but instead of objects, it is for classes only. (Since classes are objects in Objective-C, you could use nil for a pointer of type Class as well, but that is discouraged for code readability reasons.)

2

Adding a bit of pedantry....

nil is a value that represents a pointer to a valid non-object. From a C perspective, it is a pointer to nowhere. However, it has special meanings in the context of Objective-C. Because Objective-C is a nil eats messages language, assigning nil to an object pointer will make that object pointer effectively a no-op in all subsequent messaging operations.

nil's value is defined as 0, but -- technically -- it doesn't have to be represented by zero bits (though it actually has to compare as equal to zero). Because standards.

In practice, nil will be 0 exactly as Nikolai indicates.

Nil is the same as nil, but for Class object references as H2C03 mentions.

Community
  • 1
  • 1
bbum
  • 162,346
  • 23
  • 271
  • 359