属性默认为nil?

时间:2011-12-29 16:42:25

标签: objective-c initialization instance-variables declared-property

如果我不使用ivar作为属性,但是这样做:

@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到处都是每一次。

3 个答案:

答案 0 :(得分:4)

总是零。 Objective-C在分配时将类中的所有变量初始化为nil。合成的ivars遵循相同的规则。

答案 1 :(得分:3)

属性由实例变量支持,如果它们是自动合成的 - 所以是的,默认情况下这些属性将返回nil

答案 2 :(得分:2)

是的,所有属性,ivars和静态变量始终定义为初始化为nil。现在使用ARC,这将转移到__strong堆栈变量(__strong是所有对象指针的默认值)。