2

私はである ivar を持っていNSMutableArrayます。配列を初期化する方法としてこの関数を使用する人を見てきました。

- (NSMutableArray *)varArray
{
   if (!varArray)
      varArray = [[NSMutableArray alloc]init];

   return varArray;
}

そして、配列は で解放されdeallocます。

これをやろうとすると、配列が初期化されることもあれば、初期化されないこともあります。

だから私が求めているのは、これは ivar を初期化する良い方法ですかNSMutableArray、それともこれを行う方が良いですか:varArray = [[[NSMutableArray alloc]init]autorelease];代わりに?

4

2 に答える 2

1

この行を行う:

varArray = [[NSMutableArray alloc]init];

常に問題ありませんが、どの機能が重要なのかを示します。変数のセッターで初期化しているように見えるので、そのインスタンス変数を照会するたびに、常に存在する必要があります...理論的には。ただし、ivar を nil に設定せずに解放するだけでは問題が発生する可能性があるため、次のように ivar ポインターを明示的にリセットして、解放時に確実に nil になるようにします。

[varArray dealloc];
varArray = nil;

これにより、if (!varArray)チェックが正しいことが保証されます。

于 2012-10-02T02:16:20.980 に答える
0

だから私が求めているのは、これは ivar NSMutableArray を初期化する良い方法ですか?

いいえ。

オブジェクトの指定された初期化子を実装し、そこで配列を初期化するだけです。

- (id)init
{
  self = [super init];
  if (0 == self)
    return 0;
  varArray = [NSMutableArray new];
  return self;
}
于 2012-10-02T05:43:43.267 に答える