对象发送--autorelease太多次了

时间:2010-05-13 07:04:06

标签: iphone objective-c autorelease

我有这个简单的代码返回今天的日期作为字符串格式:

+(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'创建它,但我不能在此发布,因为我必须返回值,所以我添加自动释放。

如何才能更好地改进它?

感谢,

2 个答案:

答案 0 :(得分:8)

你是-autoReleasing NSString,而不是格式化程序。

你不需要autoRelease,因为-stringFromDate:给你一个已经自动释放的字符串。

以下是您的代码的一种方式:

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

}

答案 1 :(得分:0)

鉴于NSDate的{​​{3}}始终采用YYYY-MM-DD HH:MM:SS ±HHMM格式:

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

把它扔出去。它的效率可能低于NSDateFormatter方法。