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,由于我没有申报伊娃(_someArray不是伊娃),我不确定它是否会每次都是nil

回答

4

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

2

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

3

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