1

Если я не использовать Ивар для свойств, но сделать это:Свойства по умолчанию равны нулю?

@interface someClass : NSObject 

@property (nonatomic, retain) NSArray * someArray; 

@end 

@implementation someClass 

@synthesize someArray = _someArray; 

- (void) someMethod 
{ 
    if(self.someArray == nil){ 
     // True on the first call? 
    } 
} 


@end 

В первый раз я проверяю self.someArray возвращает nil, как это делает _someArray, но это гарантировано? Я читал только, что ivars гарантированно будет nil, и поскольку я не объявляю ivar (_someArray не является ivar), я не уверен, будет ли он nil всюду и каждый раз.

ответ

4

Это всегда ноль. Objective-C инициализирует все переменные в классе до нуля, когда он выделен. Синтезированные ивары следуют тем же правилам.

2

Да, все свойства, ivars и статические переменные всегда были определены как инициализированные до nil. Теперь с ARC переносится на __strong переменные стека (__strong является значением по умолчанию для всех указателей объектов).

3

Свойства поддерживаются переменными экземпляра, если они синтезированы автоматически - так что да, по умолчанию такие свойства возвращают nil.

Смежные вопросы