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

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

2 ответа

Решение

При включенном ARC переменные указателя объекта Objective-C будут установлены в ноль независимо от того, где вы их создали.

Без ARC и для встроенных типов C ваши переменные не будут инициализированы.

Переменные экземпляра объектов Objective C всегда устанавливаются в 0 (или ноль), когда вы выделяете объект.

Статика установлена ​​на 0.

Однако я привык всегда давать значения по умолчанию переменным. Это была хорошая привычка.

2 Как и в "обычном" C, локальным переменным не присваивается значение по умолчанию. (Хотя вам может повезти при первом использовании части стека: не полагайтесь на это!.)

Тем не мение, nil 01 - то естьnil == 0всегда верно - такNSLog("@%i", nil) говорит "эй, запишите аргумент как целое число", что... 0.

Удачного кодирования.


1 Видите ноль в GDB не определяется как 0x0? который охватывает техническое определение, в том числе Objective-C++, более подробно. Обратите внимание, что тип меняется в зависимости от архитектуры, поэтому "@%i"вполне может бытьнеправильным для конкретной системы.

2 См. Ответ wbyoung для правил,специфичных для ARC.

Другие вопросы по тегам