Локальные переменные установлены на nil? (Objective-C)

Я читаю книгу на Objective-C, и автор сказал, что если локальным переменным не назначено значение, они будут установлены на nil, но статические переменные будут установлены на ноль. Итак, я настроил int a и не присвоил ему значение. Затем NSLog(@"%i", a), чтобы отобразить его, и a отображался как ноль. Я был немного смущен этим, и мне было интересно, может ли кто-нибудь разъяснить это для меня?

Ответ 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 правил.