Ответ заключается в том, что это зависит от области, в которой определена переменная.
Переменные экземпляра объектов Objective C всегда инициализируются равными 0 / nil / false, поскольку выделенная память обнуляется.
Глобальные переменные , вероятно, инициализированы значением 0 / nil / false, поскольку, когда память впервые выделяется процессу, она также обнуляется операционной системой. Однако, разумеется, я никогда не полагаюсь на это и всегда инициализирую их сам.
Локальные переменные неинициализированы и будут содержать случайные данные в зависимости от того, как вырос / сократился стек.
Примечание: для указателей на объекты Objective-C вы можете безопасно отправлять сообщения на ноль. Так, например:
NSArray* foo = nil;
NSLog(@"%@ count = %d", foo, [foo count]);
совершенно законно и будет работать без сбоев с выводом что-то вроде:
2010-04-14 11:54:15.226 foo[17980:a0f] (null) count = 0