我总是遇到一些问题让臭名昭着的NSDateFormatter导致代码中的内存不稳定。我一定不能理解如何正确使用它。我看过大量的示例代码并在此之后建模我的方法,但似乎内存问题仍困扰着我。我遇到的问题是这种方法正在创造一个僵尸 - 不太确定如何/为什么。一些见解会很精彩!!
-(NSString *)getTimeZoneFormatedDate:(int)subtractMinutes TimeZoneOffset:(NSString *)timeZoneOffset
{
float timeZoneOffsetInt = [timeZoneOffset floatValue];
//Calculate the requested UTC time
NSDate *UTCDateTimeNow = [NSDate date];
NSDate *UTCDateTimePast = [UTCDateTimeNow dateByAddingTimeInterval:((subtractMinutes*60)+(timeZoneOffsetInt*60*60))];
//Round the minutes down
NSDateComponents *time = [[NSCalendar currentCalendar]
components:NSHourCalendarUnit | NSMinuteCalendarUnit
fromDate:UTCDateTimePast];
int minutes = [time minute];
float minuteUnit = floorf((float) minutes / 10);
minutes = minuteUnit * 10;
//Format the minutes string
NSString *minuteString;
minuteString = [NSString stringWithFormat:@"%d",minutes];
if ([minuteString length] < 2)
minuteString = [@"0" stringByAppendingString:minuteString];
//Format the rest of the date & time
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSDateFormatter *dateFormatter;
dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"yyyy-MM-dd, HH:"];
NSString *yearMonthDayHourString = [dateFormatter stringFromDate:UTCDateTimePast];
//Put the two together and return it!
return [yearMonthDayHourString stringByAppendingString:minuteString];
}
我正在实施它:
NSString *timeZoneText = [self getTimeZoneFormatedDate:minuteModifier*-10 TimeZoneOffset:radarTimeZoneOffset];
如果我使用dateformatter注释掉我的项目并且我的方法刚刚返回:
return @"blah blah";
没有问题 - 一切都没有错误。所以,我认为可以安全地假设问题在于!谢谢你的帮助!
答案 0 :(得分:0)
您可以尝试NSDateFormatter的getObjectValue:forString:range:error:方法。也许返回NSError为你提供了一个合理的解释,为什么它失败了。
另一方面,可能有一种更简单的方法来获得结果:
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];
[usLocale release];
return [dateFormatter stringFromDate:date];
答案 1 :(得分:0)
我认为问题是你的“NSString * yearMonthDayHourString”是自动释放的字符串。 您可以将其保留在类似
的实现代码中self.timeZoneText = blabla如果timeZoneText属性为retain 或者只是[timeZoneText保留];然后释放;