Каково значение BOOL
переменной по умолчанию в Objective-C?
95
Каково значение BOOL
переменной по умолчанию в Objective-C?
Там нет нет значения по умолчанию , если вы пишете
-(void)somemethod {
BOOL x; // <--- no default value
Он инициализируется мусором.
Однако для BOOL
ivar он будет инициализирован NO
, поскольку весь экземпляр заполняется 0 при инициализации.
(Примечание: когда ARC включен, указатели локальных объектов всегда будут иметь значение по умолчанию nil
, но локальные переменные не объектных типов, таких как BOOL, по-прежнему инициализируются как мусор. См. « Локальные переменные установлены в ноль?» (Objective-C) .)
Я провел несколько собственных экспериментов, используя Xcode 5.1, OS X Mavericks 10.9.4. Для тех, кто не знает, ALog - это модифицированный NSLog. В любом случае, первый эксперимент заключался в использовании
isLandscape
в качестве общедоступной переменной с@synthesize
, чтобы к ней мог получить доступ родительский контроллер представления (показано ниже). Второй эксперимент не использовал@synthesize
и я, очевидно, привыкself.isLandscape
получать такой же результат в консоли. Вывод консоли под моим кодом. В третьем эксперименте в качестве локальной переменной внутри метода использовался isLandscape.Это результаты первых двух экспериментов ...
В ТРЕТИМ ЭКСПЕРИМЕНТЕ isLandscape больше не было собственностью. Я установил его как локальную переменную с интересными результатами:
Это результаты третьего эксперимента ...
Я предполагаю, что свойства инициализируются мной или Xcode автоматически, но локальные переменные вообще не получают значений. Тем не менее, посмотрите на [Строка 164], что локальная переменная не является ДА или НЕТ, но не равна нулю? Я предполагаю, что это (случайное) значение мусора, на которое вы не можете рассчитывать. Надеюсь, это поможет следующему человеку. Я кое-что узнал, но жду комментариев. Спасибо и удачи!
источник