Обеспечивает ли Objective-C инициализацию данных члена интерфейса?

В интерфейсе, таком как:

@interface MyClass : NSObject
{
    bool PlainOldBool;
}

@end

... does PlainOldBool получает автоматически инициализированное значение false или необходимо использовать метод init для этого явно?

Ответ 1

Да (если ваш false не равен 0). По умолчанию метод +alloc/+allocWithZone: автоматически отключит все ivars.

От https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW17

  • Он инициализирует все остальные переменные экземпляра равными нулю (или эквивалентным типу для нуля, например nil, NULL и 0.0).

Ответ 2

Также стоит отметить, что если вы делаете Objective-C ++, объекты С++, которые являются ivars объектов Objective-C, не инициализируются: их конструкторы по умолчанию не вызываются.