Я читаю книгу на Objective-C, и автор сказал, что если локальным переменным не назначено значение, они будут установлены на nil, но статические переменные будут установлены на ноль. Итак, я настроил int a
и не присвоил ему значение. Затем NSLog(@"%i", a)
, чтобы отобразить его, и a
отображался как ноль. Я был немного смущен этим, и мне было интересно, может ли кто-нибудь разъяснить это для меня?
Локальные переменные установлены на nil? (Objective-C)
Ответ 1
С включенным ARC ваши переменные указателя на объект Objective-C будут установлены равными нулю независимо от того, где вы их создаете.
Без ARC и для встроенных типов C ваши переменные не будут инициализированы.
Экземпляры экземпляра объектов Objective-C всегда устанавливаются в 0 (или nil) при распределении объекта.
Статики установлены в 0.
Я привык всегда давать значение по умолчанию для переменных. Это была хорошая привычка.
Ответ 2
Нет 2. Так же, как в "plain" C, локальным переменным не присваивается значение по умолчанию. (Хотя вам может повезти, первая часть стека используется: не полагайтесь на это!)
Во всяком случае, nil
равно 0 1 т.е. nil == 0
всегда истинно, поэтому NSLog("@%i", nil)
говорит "hey, log аргумент как целое"... 0.
Счастливое кодирование.
1 См. nil в gdb не определяется как 0x0?, который охватывает техническое определение, включая случай Objective-C ++, более детально. Обратите внимание, что тип изменяется в зависимости от архитектуры, поэтому "@%i"
вполне может быть ошибочным для конкретной системы.
2 См. wbyoung ответ для определенных ARC правил.