3

今日の日付を書式設定された文字列として単純に返す次のコードがあります。

+(NSString*) getTodayString_YYYY_MM_DD {

  NSDate    * today = [NSDate date];

  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"yyyy-MM-dd"]; 

  return [[formatter stringFromDate:today] autorelease];

}

インストゥルメントを使用すると、メモリリークは発生しませんが、分析すると、XCode は次のように言います。

Object sent -autorelease too many times

私の理解が正しければ、「alloc」を使用して作成しているため、フォーマッタを手動で解放する必要がありますが、値を返さなければならないため、ここでは解放できないため、autorelease を追加します。

どうすれば改善できますか?

ありがとう、

r.

4

2 に答える 2

9

フォーマッタではなく、NSString を自動リリースしています。

-stringFromDate: はすでに autoReleased 文字列を提供しているため、autoRelease は必要ありません。

コードが次のようになる 1 つの方法を次に示します。

+(NSString*) getTodayString_YYYY_MM_DD {

  NSDate    * today = [NSDate date];

  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"yyyy-MM-dd"]; 

  NSString *retString = [formatter stringFromDate:today];
  [formatter release];

  return retString;

}
于 2010-05-13T07:07:16.613 に答える
0

が常に次NSDateの形式であるとすると、descriptionYYYY-MM-DD HH:MM:SS ±HHMM

+ (NSString *) getTodayString_YYYY_MM_DD
{
    return [[[NSDate date] description] substringToIndex:10];
}

そこに投げ捨てるだけです。おそらく方法よりも効率的ではありませんNSDateFormatter

于 2010-05-13T11:13:14.320 に答える