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]ても無駄なコピーができるだけで無意味です。

回避したいのは、 メソッドinitdeallocメソッドでプロパティ セッターを使用することです。セッターは特定の状態値に依存する副作用を潜在的に持つ可能性があるため、部分的に構築された/部分的に破棄されたオブジェクトでそれらを呼び出したくありません。ivar に直接代入して、実行中にセッターをスキップする方がはるかに優れていinitます。

于 2010-11-24T06:39:19.160 に答える