19

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

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

  • Error: User Rate Limit Exceeded

    от stumped
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededdeveloper.apple.com/library/content/releasenotes/ObjectiveC/…

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit ExceededstaticError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Если в книге сказано, что, как вы ее написали, я бы порекомендовал выбросить ее в корзину и найти другую книгу. Ноль и 0 фактически являются синонимами. Локальные переменные (за исключением ссылок на объекты в ARC) будут неопределенными. Статические переменные и переменные экземпляра будут nil / zero / NULL / Nil, которые являются синонимами.

    от bbum
  • Вы должны попробовать NSString a;

    от JoshRagem
  • Договорились с ББОМ; это ужасно. Какого черта эта книга? Смотрите также:stackoverflow.com/questions/9726817/…

    от Josh Caswell
  • 47

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

    новлены в ноль независимо от того, где вы их создаете.

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

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

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

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

  • 12

    нет2, Так же, как и в «обычном» C, локальные переменныеnot 

    назначено значение по умолчанию. (Хотя вам может повезти при первом использовании части стека:do not положитесь на это !.)

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

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

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

    2 См. Ответ wbyoung дляARC-specific правила.