Локальные переменные установлены в ноль? (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.