我正在尝试确定为NSString属性设置默认值的推荐方法。
我知道在类的in it和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];
就这样做:
identifier = @"fireSpell01";
没必要 retain 绳子。字符串常量存在于程序的生命周期中,不需要被保留或释放。做 [[NSString stringWithString:@"fireSpell01"] retain] 只是创建了一个不必要的副本,没有意义。
retain
[[NSString stringWithString:@"fireSpell01"] retain]
要避免的是在 init 和 dealloc 方法。因为setter可能有依赖于某些状态值的副作用,所以您不想在部分构造/部分销毁的对象上调用它们。最好直接分配给ivar,在 初始 .
init
dealloc
初始