Присваивается ли NSInteger автоматически 0

Я новичок в программировании на Objective-C, поэтому, пожалуйста, извините за небрежный вопрос. Если я создам NSInteger следующим образом:

@property (nonatomic) NSInteger myNumber;

присваивается ли ему какое-то случайное целое число а-ля 'C' или автоматически присваивается '0'?

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

На данный момент я параноик и использую NSNumber, чтобы, по крайней мере, я мог проверить на ноль, но я надеялся увидеть, смогу ли я сделать это лучше.


person ThinkBonobo    schedule 04.01.2014    source источник
comment
Вы могли бы создать свое собственное тестовое приложение, чтобы выяснить это для себя, понимаете? Кроме того, не помешает инициализировать его самостоятельно.   -  person hd1    schedule 05.01.2014
comment
hd1 - Проблема с простым тестированием самого себя в том, что я могу получить ноль, и это не докажет, что он всегда будет 0 и это не что-то специфическое для моей установки. @creker. Хотя заданный вопрос отличается, ответ определенно тот же, выделяется 0 из значения. Спасибо за вашу помощь!   -  person ThinkBonobo    schedule 05.01.2014
comment
@ThinkBonobo Прочтите ответ SO, на который ссылается Creker.   -  person zaph    schedule 05.01.2014
comment
В частности, вам будет полезен этот ответ: stackoverflow.com/a/3115012/1445366   -  person Aaron Brager    schedule 05.01.2014
comment
Переменные экземпляра / свойства всегда устанавливаются в ноль / ноль.   -  person Hot Licks    schedule 05.01.2014
comment
@ hd1 - Тестовый пример ничего не докажет. Вы можете получить ноль 1000 раз и ненулевое значение при 1001-й попытке, или после перекомпиляции, или только если другое приложение было запущено первым или что-то еще.   -  person Hot Licks    schedule 05.01.2014


Ответы (2)


Комментарий Пера Крегера,

Я посмотрел на результат для Всегда ли ints инициализируется значением 0?

NSInteger действительно инициализируется нулем, как и все переменные экземпляра класса.

Это комментарий к документации по яблокам:

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

Более подробный ответ, в том числе о том, как это не относится к malloc, см. В принятом ответе на сообщение https://stackoverflow.com/a/990826/2668545

person ThinkBonobo    schedule 05.01.2014

По умолчанию 0. Думаю, вы неправильно его установили.

person kkocabiyik    schedule 04.01.2014
comment
@Aaron Brager бесполезный комментарий! - person zaph; 05.01.2014