0

我正在尝试确定为 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];
4

1 回答 1

3

只需这样做:

identifier = @"fireSpell01";

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

您要避免的是在initanddealloc方法中使用属性设置器。因为 setter 可能具有依赖于某些状态值的副作用,所以您不想在部分构造/部分破坏的对象上调用它们。直接分配给 ivars 并在init.

于 2010-11-24T06:39:19.160 回答