このを通じてデバッガでステップ実行すると、dfStringが無効である[DFリリース]この文字列をコピーして自動解放する必要がありますか?
- (NSString*)dateFormatStringWithLocale:(NSLocale*)locale {
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateStyle:NSDateFormatterShortStyle];
[df setTimeStyle:NSDateFormatterShortStyle];
[df setLocale:locale];
NSString *dfString = [df dateFormat]; // dfString now contains nice date format
[df release]; // seems to also kill dfString ???
return dfString; // dfString is invalid here
}
後のは、それについて考えてみましょう:dfStringは、他のと同じように、オブジェクトです。私は[df dateFormat]でdfから文字列を要求します。私はその文字列を所有していないので、私はそれを解放する必要はありません。しかし、私はdfを所有しているので、私はそれをリリースします。今、[df dateFormat]から得た文字列がdfのいくつかのivarであり、dfの-deallocで-release'dを取得すると仮定してください。そして、その呪われた弦は消えてしまった。しかし、私がdfStringが所有する文字列へのポインタにすぎないdfStringを呼び出すと、damn dfは解放されません。だから私は何をしますか?文字列をコピーして自動解放しますか?大会はobj-にインスタンスメソッドであるとして、あなたが完全に自動解放オブジェクトを返しているその方法を
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
を放し
[df release]; // Remove this line
を削除:自動解放するNSDateformatterを設定し
それは質問のための素晴らしいタイトルではありません...私はそれを変更する担当者を持っていない私は恐れている! : – h4xxr
それを変更しました。それは今より良いかもしれませんか? –