2011-08-16 23 views
1

Objective-Cの謎は私にはもう一度悩まされます。NSDateFormatterから与えられた値のときの文字列解読

私は文字列を持っています。これは、 "Common.h"というヘッダーファイルで定義されています。問題ありません

_DATESTRING = @"2011-08-16"; 

、と私はこれを行う場合、それは、しかし、永遠に周りスティック:

_DATESTRING = [format stringFromDate:[NSDATE dateWithTimeIntervalSinceNow:0]]; 

は私が送られた「というメッセージが表示されますが、私はそれをthusly値を与える場合

パイプをさらにダウンさせてインスタンスを解放します。

なぜですか?

答えて

2
// This is a string that's not going to be released 
_DATESTRING = @"2011-08-16"; 

// This is a string that's autoreleased 
_DATESTRING = [format stringFromDate:[NSDATE dateWithTimeIntervalSinceNow:0]]; 

// You want somethhing like this 
_DATESTRING = [[format stringFromDate:[NSDATE dateWithTimeIntervalSinceNow:0]] retain]; 

あなたのメソッドの名前が含まれている場合は、alloccopynewまたはmutableCopyあなたがする必要はありそれを自分でリリースしてください。それ以外の場合はすでに自動レリースされているので、それを保持したい場合は、それを保持する必要があります。

1

正確にパイプがダウンしていますか?

メソッドstringFromDate:は、自動解放オブジェクトを返します。そのため、使用するときに自動的に割り当てが解除されることは間違いありません。文字列リテラルは、オブジェクトの標準的なメモリ管理規則に従わないため、文字列リテラルでは発生しません。

あなたがretainメッセージを追加することもできます。

_DATESTRING = [[format stringFromDate: 
          [NSDATE dateWithTimeIntervalSinceNow:0]] retain]; 
1

-stringFromDateので:戻りオブジェクトを自動解放します。あなたはそれが永遠に固執する場合、あなたはそれに-retainメッセージを送信する必要があり、それは次のようになります。

_DATESTRING = [[format stringFromDate:[NSDATE dateWithTimeIntervalSinceNow:0]] retain]; 
要するに
関連する問題