В Objective-C, переменные типа int, которым не присвоено значение nil? - PullRequest
2 голосов
/ 25 июня 2010

Если у меня есть это в моем файле .h:

int index;

А затем в файле .m у меня есть:

if (index == nil)

, и я не назначилзначение до index, это сбудется?

РЕДАКТИРОВАТЬ
Я думаю, nil используется только для объектов.Так в каком состоянии int, которому не присвоено значение?

Ответы [ 4 ]

4 голосов
/ 25 июня 2010

Не существует такого понятия, как «ноль» для целых. Это значение объекта. Что касается того, что переменные инициализируются по умолчанию:

  • Нестатические локальные переменные не инициализируются каким-либо определенным значением (на практике они обычно имеют любой битовый шаблон, который был ранее в занимаемой ими памяти)
  • Статические переменные инициализируются в 0
  • Глобальные переменные инициализируются в 0
  • Переменные экземпляра инициализируются в 0

Обратите внимание, что первое правило выше также применимо к локальным объектным переменным. Они не будут для вас нулевыми. (Однако переменные экземпляра с типами объектов будут.)

1 голос
/ 25 июня 2010

Значение целого числа, которое еще не было присвоено, зависит от его объявления - int со статической продолжительностью хранения равен нулю, если вы не назначаете ему что-либо еще. int с автоматическим или выделенным сроком хранения может иметь любое значение, если вы не инициализируете его явно.

Между прочим, размещение объявления объекта в вашем заголовке должно вызвать у вас боль позже.

1 голос
/ 25 июня 2010

Переменная технически не определена (может иметь любое значение) до того, как вы присвоите ей значение.Скорее всего, он будет равен нулю.Также, nil и NULL определены в ноль.Однако такое сравнение не рекомендуется.Вы должны использовать nil только при сравнении указателей (он не предназначен для использования с примитивами).

0 голосов
/ 25 июня 2010

nil - это конкретное значение, зарезервированное для указателей объекта Objective-C. Он очень похож на NULL (0), но имеет другую семантику при использовании с передачей сообщений.

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

void foo () {
   //initialize local variable
   int x = 5;
}

//initialise static variable
static int var = 6; 
...