В следующем коде безопасно использовать _test
и ожидать, что он будет иметь значение NO
? Или мне нужно всегда явно инициализировать его в - (id)init
?
@implementation Test {
BOOL _test;
}
В следующем коде безопасно использовать _test
и ожидать, что он будет иметь значение NO
? Или мне нужно всегда явно инициализировать его в - (id)init
?
@implementation Test {
BOOL _test;
}
Можно с уверенностью предположить, что все переменные экземпляра будут инициализированы до 0.
Однако это не относится к переменным с локальной областью / областью метода, которые, если не инициализировать вручную, будут указывать на мусор.
Для справки в будущем, как указывает Роб Напье, это можно найти в документация для + (id)alloc
:
Переменная экземпляра
isa
нового экземпляра инициализируется структурой данных, описывающей класс; память для всех других переменных экземпляра установлена в0
.
+alloc
. В частности, все ivars, кроме isa
, инициализируются значением 0, но вы в любом случае не должны возиться с isa
.
- person Rob Napier; 18.05.2012
nil
при компиляции под ARC.
- person jscs; 18.05.2012
Я привык инициализировать его явно, в основном из-за прослеживаемости и удобочитаемости. Но когда вы посмотрите на Определение BOOL
, вы увидите, что NO
- это не что иное, как #define
для 0. Из-за этого, я предполагаю, вы можете смело ожидать, что _test
будет NO
.
действительно хорошая публикация о логических значениях и их обработке - Objective-C: BOOL vs bool