iPhone,如果我将日期字符串从一种格式转换为另一种格式,存储它,我必须将它转换为日期,怎么样?
问题描述:
我需要在屏幕上以某种格式显示日期,但我需要将日期另存为另一种格式的字符串。我认为这意味着我必须将其转换为日期并返回字符串。iPhone,如果我将日期字符串从一种格式转换为另一种格式,存储它,我必须将它转换为日期,怎么样?
我该怎么做?
我已经想出了如何将我的字符串转换为日期,但构建分析器给我一个警告。
我想字符串从年月日转换为YYYY-MM-DD
他到目前为止我的代码...
NSString *startDateString = btnStartDate.titleLabel.text;
NSDateFormatter *dateStartFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateStartFormatter setDateFormat:@"dd MM yyyy"];
NSDate *datStartDate = [[NSDate alloc] init];
datStartDate = [dateStartFormatter dateFromString:startDateString];
答
分析仪警告您泄漏。首先,将一个新对象分配给datStartDate
,然后用datStartDate = [dateStartFormatter dateFromString:startDateString];
存储一个新值,而不先释放先前的对象。
所以不是:
NSDate *datStartDate = [[NSDate alloc] init];
datStartDate = [dateStartFormatter dateFromString:startDateString];
你应该这样写:
NSDate *datStartDate = [dateStartFormatter dateFromString:startDateString];
答
那么你分配空间对于datStartDate
为新的NSDate
,然后将其替换为日期范围内全新的NSDate
(现在您已为第一个NSDate
预留了内存,这是永远不会使用的)
使用此:
NSDate* datStartDate = [dateStartFormater dateFromString:startDateString];
然后使用dateStartFormater
或其他NSDateFormatter
把你的约会对象成所需要的字符串,像这样:
[dateStartFormatter setDateFormat:@"yyyy MM dd"];
NSString* formatedDate = [dateStartFormater stringFromDate:datStartDate];
我不确定这将如何工作,因为你还没有指定yyyy-MM-dd? – Jules 2010-10-01 06:59:22
仔细看,它是关于'datStartDate'变量的,这是你例子中的第4行。这会导致内存泄漏,因为您用第5行中的新对象覆盖第4行的指针。格式设置在第3行,因此一切正常。试试吧:用我建议的线替换第4行和第5行,警告就会消失。 – DarkDust 2010-10-01 13:30:28