В ObjectiveC указатели, которые являются переменными экземпляра класса, инициализируются как «ноль», или иначе? - PullRequest
10 голосов
/ 16 июня 2009

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

NSString* c;

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

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

Ответы [ 4 ]

13 голосов
/ 16 июня 2009

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

3 голосов
/ 16 июня 2009

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

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

1 голос
/ 16 июня 2009

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

if (nil == myVariableIHaventInitialisedYet)
{ 
  myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove];
}
0 голосов
/ 09 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...