views:

235

answers:

2

I have this code that simple returns Today's date as a string formatted:

+(NSString*) getTodayString_YYYY_MM_DD {

  NSDate    * today = [NSDate date];

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

  return [[formatter stringFromDate:today] autorelease];

}

With instruments I'm not getting a memory leak, but when I Analyze, XCode says:

Object sent -autorelease too many times

If I understand correctly, I have to release manually the formatter as I'm creating it using 'alloc', but I can't release here because I have to return the value, so I add the autorelease.

How I can do it better to improve it ?

thanks,

r.

+7  A: 

You are -autoReleasing the NSString, not the formatter.

You don't need an autoRelease since -stringFromDate: is giving you an already autoReleased string.

Here is one way your code can look like:

+(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;

}
mahboudz
Thanks for the correction, Georg!
mahboudz
ok, thanks for the solution.
mongeta
A: 

Given that an NSDate's description is always in the format YYYY-MM-DD HH:MM:SS ±HHMM:

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

Just throwing it out there. It's probably less efficient than the NSDateFormatter method.

dreamlax