为NSString属性设置默认值

时间:2010-11-24 06:29:14

标签: objective-c nsstring init

我正在尝试确定为NSString属性设置默认值的推荐方法。

我理解在类的init和dealloc方法中使用访问器方法是不安全的。我经常有字符串常量,我想分配默认值。建议的方法是什么(考虑到iVar将在dealloc方法中发布)?

例如,我了解以下内容不安全:

@property (nonatomic, copy) NSString *identifier;
....

- (id) init
{ 
    self = [super initWithLayer:displayLayer];

    if (self != nil)
    {
        self.identifier = @"fireSpell01";
    }

    return self;
}

没关系,或建议这样做:

identifier = [@"fireSpell01" retain];

或者我必须这样做:

identifier = [[NSString stringWithString:@"fireSpell01"] retain];

1 个答案:

答案 0 :(得分:3)

这样做:

identifier = @"fireSpell01";

不需要retain字符串。字符串常量存在于程序的生命周期中,永远不需要保留或释放。执行[[NSString stringWithString:@"fireSpell01"] retain]只会创建一个不必要的副本,并且毫无意义。

您要避免使用initdealloc方法中的属性设置器。由于setter可能具有依赖于某些状态值的副作用,因此您不希望在部分构造/部分销毁的对象上调用它们。在init期间直接分配给ivars并跳过设置者会好得多。