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
для значения имени, а не, возможно, сбой.