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

19

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

Если в книге сказано, что, как вы ее написали, я бы порекомендовал выбросить ее в корзину и найти другую книгу. Ноль и 0 фактически являются синонимами. Локальные переменные (за исключением ссылок на объекты в ARC) будут неопределенными. Статические переменные и переменные экземпляра будут nil / zero / NULL / Nil, которые являются синонимами. bbum
Вы должны попробовать NSString a; JoshRagem
Договорились с ББОМ; это ужасно. Какого черта эта книга? Смотрите также:stackoverflow.com/questions/9726817/… Josh Caswell

Ваш Ответ

2   ответа
47

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

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

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededdeveloper.apple.com/library/content/releasenotes/ObjectiveC/…
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 правила.

Error: User Rate Limit Exceeded stumped
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededstaticError: User Rate Limit Exceeded

Похожие вопросы