2011-03-08 6 views
1

私はインスタンス変数NSDate * dateを持っています。そして私は(例えばのviewDidLoadで)実行します。self.variable = 'some value'を使用して違いがありますか?単に変数= 'some value'(インスタンス変数)

date = [NSDate dateWithTimeIntervalSinceNow:0]; 

または

self.date = [NSDate dateWithTimeIntervalSinceNow:0]; 

これら2つの違いはありますか?そしてself.date =いくつかの値を宣言することにより、正しいと回答 ラディスラフ

答えて

4

はい、違いがあります。最初は他のプロパティに代入されている間だけ、変数に値を代入するため、書き込みと同じです:あなたは@property(retain) NSDate *date;デフォルトの実装として、あなたの財産を定義した場合の通過(例えば

[self setDate:[NSDate dateWithTimeIntervalSinceNow:0]]; 

@synthesize date)は古い値を解放し、新しい値を保持します。カスタムsetDate:の実装を提供し、日付が割り当てられるときにいくつかのアクションを実行することもできます。変数に値を代入するだけであれば、このようなことは起こりません。

+0

それは、私がdate = [NSDate dateWithTimeIntervalSinceNow:0];日付はオートレリースされ、後でこの変数にアクセスしようとするとEXC_BAD_ACCESSが出る可能性がありますか? – Ladislav

+1

正確に(あとで明示的に保持しない場合)。または、EXC_BAD_ACCESSを取得しない場合もありますが、他のオブジェクトがまったく同じ場所に作成されているため、そのために面白い結果が得られます。 – DarkDust

+0

それは何が起こっていたのか...時々私はEXC_BAD_ACCESSを得ることができなかったので、私はそうしないでしょう... Thanx – Ladislav

1

ため、おそらく、なぜ:)

ありがとうとなるものがある場合。あなたは実際に次のことをしています

if(date)[date release]; date = [somevalue retain];

+1

を解放する必要があります。 –

+0

また、リリースと同じ値を再割り当てすると、参照カウンタが0になってオブジェクトの割り当てが解除される可能性があるため、書いた順序であれば悪いことが起こります。正しい順序は、最初に新しい値を保持してから古い値を解放し、新しい値を変数に代入することです。 – DarkDust

4

はい。 self.dateはdateというプロパティの設定を呼び出し、プロパティ指定にretainのようなものを指定した場合や、独自のアクセサを指定した場合に呼び出されます。

絶対に確実でない限り、ほとんどの場合、self.dateを日付よりも使用することをお勧めします。また、現在のコンパイラでは、独自の変数宣言を使用せずにプロパティをデカル化して合成することができます。明示的な変数宣言よりも優先されます。その構造体を使用すると、アクセッサを使用せずに直接変数を使用するたびにコンパイラエラーが発生します。これは利点があります。

+0

* declare-property-back-backing-variable *機能は、[x64とiOSでのみ動作します](http://stackoverflow.com/questions/4511700/synthesizing-a-property-without-instance-variables)ではなくx86(32ビットモード)とPPC、BTW。 – DarkDust

+0

ダークダストに感謝します。それは知って良いです。リンクされた質問から、私たちがpre iOS 4用に構築している場合、バッキング変数を宣言する必要があるようです。 – Krishna

1

date = [NSDate dateWithTimeIntervalSinceNow:0]を使用すると、ここに日付は自動リリースオブジェクトです。

しかし、もしあなたがself.dateを使用し、そのプロパティが保持されている場合、それがオブジェクトを解放し、自動ではありません、我々は明示的にプロパティが(保持)として定義されている場合にのみ、日付

+0

... 'dealloc' *で明示的にdate *をリリースする必要があります。 – DarkDust

関連する問題