如果我不使用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
到处都是每一次。
答案 0 :(得分:4)
总是零。 Objective-C在分配时将类中的所有变量初始化为nil。合成的ivars遵循相同的规则。
答案 1 :(得分:3)
属性由实例变量支持,如果它们是自动合成的 - 所以是的,默认情况下这些属性将返回nil
。
答案 2 :(得分:2)
是的,所有属性,ivars和静态变量始终定义为初始化为nil
。现在使用ARC,这将转移到__strong
堆栈变量(__strong
是所有对象指针的默认值)。