Неинициализированные указатели Objective C против нулевых указателей - PullRequest
11 голосов
/ 25 октября 2009

Возможно, моя память полностью испортилась, но я помню, что объявление указателей без их инициализации указывало на ноль. Но в последнее время, похоже, это не так. Всегда ли так было? Или это как-то связано с настройками компилятора?

Ответы [ 2 ]

16 голосов
/ 25 октября 2009

Переменные экземпляра объектов инициализируются в nil в alloc (весь объект обнуляется).

Edit: Кроме того, глобальные и статические переменные хранения инициализируются нулями (6.7.8 10 C99 Standard , спасибо Дереку за указание на это).

Локальные переменные стека не инициализируются автоматически. Это не изменилось в известной истории.

5 голосов
/ 25 апреля 2014

С Переход на примечания к выпуску ARC :

Переменные стека инициализируются с nil

При использовании ARC сильные, слабые и автоматически высвобождаемые переменные стека теперь неявно инициализируются с nil. Например:

- (void)myMethod {
    NSString *name;
    NSLog(@"name: %@", name);
}

будет записывать null в качестве значения имени, а не при падении.

...