2

如果我不使用 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无处不在。

4

3 回答 3

4

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

于 2011-12-29T16:46:48.410 回答
3

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

于 2011-12-29T16:45:33.657 回答
2

是的,所有属性、ivars 和静态变量始终被定义为初始化为nil. 现在有了 ARC,这会延续到__strong堆栈变量(__strong作为所有对象指针的默认值)。

于 2011-12-29T16:45:25.973 回答