Objective-C неинициализированные указатели против нулевых указателей

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

Ответ 1

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

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

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

Ответ 2

От Переход к заметкам о выпуске ARC:

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

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

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

будет записывать null для значения имени, а не, возможно, сбой.