The answer is that it depends on the area in which the variable is defined.
Objective-C object instance variables are always initialized to 0 / nil / false, since the allocated memory is nullified.
Global variables are probably initialized to 0 / nil / false, because when memory is first assigned to a process, it is also reset by the operating system. However, of course, I never rely on this and always initialize them myself.
Local variables are not initialized and will contain random data depending on how the stack has grown / shrunk.
NB for pointers to Objective-C objects, you can safely send messages to zero. For example:
NSArray* foo = nil; NSLog(@"%@ count = %d", foo, [foo count]);
is completely legal and will work without fail with the output of something like:
2010-04-14 11:54:15.226 foo[17980:a0f] (null) count = 0
source share