Хотя я никогда никого не отворачивал от учебных пособий по Haskell, они могут быть немного ошеломляющими, если вы разработчик в стиле ООП и не знаете, почему вы хотите жить в функциональном мире. .
Я выступил с докладом «скаляр для всех нас», который подходит к скалазу, хотя примеры, с которыми все знакомы: памятка (Памятка в скалазе), проверка домена (валидация в скалазе) и т. Д. Таким образом, «вариант использования» «Ясно и могу начать учиться решать знакомые проблемы, используя силу скалаза.
Да, переменные экземпляра класса всегда инициализируются значением 0 (или nil
, NULL
или false
, в зависимости от точный тип данных). См. язык программирования Objective-C 2.0 :
Метод
alloc
динамически выделяет память для переменных экземпляра нового объекта и инициализирует их все на 0, то есть все, кромеisa
переменная, которая связывает новый экземпляр с его классом.
РЕДАКТИРОВАТЬ 08.05.2013
Apple, похоже, удалила вышеуказанный документ (теперь связанный с The Wayback Machine). (В настоящее время) активный документ Программирование с помощью Objective-C содержит аналогичную цитату:
Метод
alloc
выполняет еще одну важную задачу, который должен очистить память, выделенную для свойств объекта, установив их в ноль. Это позволяет избежать обычной проблемы с памятью, содержащей мусор из того, что было сохранено ранее, но этого недостаточно для полной инициализации объекта.
Однако это только истинно для переменных экземпляра класса; это также верно для типов POD, объявленных в глобальной области:
// At global scope
int a_global_var; // guaranteed to be 0
NSString *a_global_string; // guaranteed to be nil
За одним исключением, это не верно для локальных переменных или для данных, выделенных с помощью malloc ()
или ] realloc ()
; это верно для calloc ()
, поскольку calloc ()
явно обнуляет выделяемую им память.
Единственным исключением является то, что когда включен автоматический подсчет ссылок (ARC), указатели стека на объекты Objective-C неявно инициализируются значением nil
; тем не мение, по-прежнему рекомендуется явно инициализировать их nil
. Из Переход к примечаниям к выпуску ARC :
Переменные стека инициализируются значением
nil
Используя ARC, сильные, слабые и автозапускаемые переменные стека теперь неявно инициализируются с помощью
nil
В C ++ (и объекты C ++, используемые в Objective-C ++) переменные экземпляра класса также не инициализируются нулем. Вы должны явно инициализировать их в своих конструкторах.
и автоматически освобождающиеся переменные стека теперь неявно инициализируются с помощью nil
. В C ++ (и объекты C ++, используемые в Objective-C ++) переменные экземпляра класса также не инициализируются нулем. Вы должны явно инициализировать их в своих конструкторах.
и автоматически освобождающиеся переменные стека теперь неявно инициализируются с помощью nil
. В C ++ (и объекты C ++, используемые в Objective-C ++) переменные экземпляра класса также не инициализируются нулем. Вы должны явно инициализировать их в своих конструкторах.
Я не думаю, что вам следует принимать какие-либо значения для инициализация. Если вы строите логику вокруг значения «0», вы должны установить его, чтобы быть уверенным.