Почему мой код работает со мной при инициализации NSInteger?

Возможный дубликат:
(Цель-) C ints всегда инициализируется значением 0?

У меня есть интерфейс

@interface MyInterface
{
   NSInteger _count;
}

@end

Тогда в моей реализации я просто использую как

if (_count==0)
{
  //do somthing
}
_count++;

И это работает, то есть в первый раз, когда это выполняется, значение на самом деле равно 0, хотя я никогда не инициализировал его равным нулю.

Это потому, что значение NSInteger по умолчанию равно 0?


person Java Ka Baby    schedule 16.09.2011    source источник
comment
Когда создается экземпляр класса Objective-C, все переменные экземпляра устанавливаются в свои начальные значения. Это делается с помощью механизма распределения.   -  person Macmade    schedule 17.09.2011


Ответы (3)


Предполагая, что вы хотели написать == вместо =, ответ состоит в том, что все переменные экземпляра (ivars) класса Objective-C инициализируются 0 или nil при создании объекта. См. Вопрос (Objective-) C ints всегда инициализируется значением 0? .

Если вы на самом деле написали if (_count = 0) с одним =, то это не соответствует вашим ожиданиям - он присваивает 0 _count, а затем проверяет, не равно ли оно нулю (выражение if (x) проверяет, не равно ли x нулю). Поскольку вы только что присвоили ему 0, это не ненулевое значение, поэтому тест всегда будет терпеть неудачу.

person Adam Rosenfield    schedule 16.09.2011

измените оператор if на

if (_count == 0)

помните, что двойное равенство - это сравнение, одиночное равенство - это присваивание

person Sean    schedule 16.09.2011

ты используешь

if (_count=0)

это установит значение 0 в переменную _count, и если это действие будет успешным, выполняется код между {}

для проверки значения переменной используйте оператор сравнения ==

if(_count == 0)
person Marek Sebera    schedule 16.09.2011