【问题标题】:Do properties default to nil?属性是否默认为零?
【发布时间】:2012-01-30 00:49:15
【问题描述】:

如果我不使用 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-12-15
          • 1970-01-01
          • 2010-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多