Возможно, моя память прошла полностью wacko, но я думаю, что я помню, что объявление указателей без их инициализации заставляло их указывать на ноль. Но в последнее время это, похоже, не так. Всегда ли так было? Или это связано с настройками компилятора?
Objective-C неинициализированные указатели против нулевых указателей
Ответ 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
для значения имени, а не, возможно, сбой.