我正在尝试确定为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];
答案 0 :(得分:3)
这样做:
identifier = @"fireSpell01";
不需要retain
字符串。字符串常量存在于程序的生命周期中,永远不需要保留或释放。执行[[NSString stringWithString:@"fireSpell01"] retain]
只会创建一个不必要的副本,并且毫无意义。
您要避免使用init
和dealloc
方法中的属性设置器。由于setter可能具有依赖于某些状态值的副作用,因此您不希望在部分构造/部分销毁的对象上调用它们。在init
期间直接分配给ivars并跳过设置者会好得多。