对象发送 -autorelease 太多次

Posted

技术标签:

【中文标题】对象发送 -autorelease 太多次【英文标题】:Object sent -autorelease too many times 【发布时间】:2010-05-13 07:04:06 【问题描述】:

我有这段代码可以简单地将今天的日期作为格式化的字符串返回:

+(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”创建格式化程序时手动释放它,但我不能在这里释放,因为我必须返回值,所以我添加了自动释放。

我怎样才能更好地改进它?

谢谢,

r.

【问题讨论】:

【参考方案1】:

你是自动释放 NSString,而不是格式化程序。

你不需要 autoRelease 因为 -stringFromDate: 给你一个已经 autoReleased 的字符串。

这是您的代码的一种方式:

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


【讨论】:

【参考方案2】:

鉴于NSDatedescription 始终采用YYYY-MM-DD HH:MM:SS ±HHMM 格式:

+ (NSString *) getTodayString_YYYY_MM_DD

    return [[[NSDate date] description] substringToIndex:10];

只是把它扔在那里。它可能比NSDateFormatter 方法效率低。

【讨论】:

以上是关于对象发送 -autorelease 太多次的主要内容,如果未能解决你的问题,请参考以下文章

Django 序列化程序在对象中发送数组

.htaccess 重定向太多次

Cookie和Session

UICollectionView 单元格配置太多次

Mutex对象

Wordpress https '重定向你太多次了。错误