В ObjectiveC - указатели, которые являются переменными экземпляра класса, инициализированными "nil", или иначе?

I.e., ObjectiveC ведет себя как C, в том случае, если вы создаете указатель, например:

NSString* c;

Указывает ли c на nil или на случайное значение в области памяти, которая была зарезервирована для него?

Другими словами, делать указатели предварительно инициализированными, или мне нужно сделать это самостоятельно? Как я уже сказал, я знаю, что это не так в C/С++, но мне интересно, есть ли здесь какая-то магия ObjC или нет.

Ответ 1

Переменные экземпляров классов в Objective-C гарантированно будут инициализированы пустым значением (0, nil и т.д.)

Ответ 2

Переменные экземпляра класса и статические/глобальные переменные инициализируются нулевым значением /NULL/ 0/false соответствующим образом.

Однако локальные переменные не инициализируются.

Ответ 3

Они ноль, и вам разрешено предположить это, например, путем тестирования:

if (nil == myVariableIHaventInitialisedYet)
{ 
  myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove];
}

Ответ 4

Следите за локальными переменными на этом. Они не инициализируются до нуля, поэтому убедитесь, что они были init'd где-то, прежде чем использовать его, если вы не запустили ноль в своем объявлении. Как говорит Петр, класс, экземпляр и статичность для вас не нужны, поэтому не беспокойтесь.

Обычно нет проблем, но, в частности, это будет иметь значение для вызовов с адресами указателей, которые были переданы (например, NSError **).