2
Foo *oFoo = [[[Foo alloc] init] autorelease];

これが私がObjectiveCでプログラムするように教えられた方法ですが、CLangエラーチェッカーは初期値が読み取られなかったと文句を言います。ただし、oFooはプロパティを持つオブジェクトです。oFoo自体には単一の値はありません。プロパティ値は重要です。

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

これを無視する必要がありますか?これは修正する価値がありますか?「初期値」が私のコンテキストでは無意味であることを見て、修正は何ですか?

4

2 に答える 2

9

通常、それは次のことを意味します。

  1. 変数を作成しました。
  2. 変数に値を割り当てました。それ自体またはそのプロパティには関係ありません。
  3. この値または完成したブロック(method / for-eachなど)を「再作成」しました。

単純なタイプの場合:

int a;
a = 2;
a = 3;

最初の値(2)は使用されません。同様のことがオブジェクトでも発生する可能性があります。次に例を示します。

Foo *oFoo = [[[Foo alloc] init] autorelease];

oFoo.PropertyA = 1;
oFoo.PropertyB = @"Hello, World."

oFoo = [[[Foo alloc] init] autorelease];

ここで、最初のalloc-initブロックは、2番目のalloc-initによってオーバーライドされる値を作成しました。そして、エラーはそのようなことを伝えます。

2番目のalloc-initブロックの代わりに、メソッドの実装を閉じることができます。これも同様です。

于 2010-04-15T15:30:21.337 に答える
0

アレクサンダーババエフは正しいかもしれないと思います。実際のコードは次のとおりです。

Part *oPart = [[[Part alloc] init] autorelease];
iParts = aParts.count;
for (iPart=0;iPart<iParts;iPart++) {
    oPart = [aParts objectAtIndex:iPart];

aPartは、Partオブジェクトの配列です。たぶん私は最初の行を削除する必要があり、最後の行は次のようになります:

Part *oPart = [aParts objectAtIndex:iPart];

その場合、ループの最後でoPartを明示的に解放する必要はありません。ループが始まる前にoPartを宣言することで、ループを通過するたびに作成/解放するのではなく、効率的にoPartオブジェクトを再利用しようとしていました。

どちらがより良いアプローチか知っている人はいますか?

于 2010-04-16T03:07:27.857 に答える