Свойства по умолчанию равны нулю? - PullRequest
1 голос
/ 29 декабря 2011

Если я не использую ивар для свойств, но сделаю это:

@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, но гарантируется ли это? Я только прочитал, что ивары гарантированно равны nil, и, поскольку я не объявляю ивар (_someArray не является иваром), я не уверен, будет ли он nil везде и всегда.

Ответы [ 3 ]

4 голосов
/ 29 декабря 2011

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

3 голосов
/ 29 декабря 2011

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

2 голосов
/ 29 декабря 2011

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

...