在我的一个视图控制器中,我有很多不同的日期格式,所以我决定在我的头文件中创建一个ivar
NSDateFormatter *dateFormatter;
然后我在我的实现文件中使用不同格式的不同格式
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE, MMM dd"];
//do something with this
[dateFormatter setDateFormat:@"y-MM-dd HH:mm:ss"];
//do something with this
etc
可以这样做吗?这是他们通过缓存你的nsdateformatters的意思吗?
当我只是构建=>运行时,这似乎工作正常但是当我启用僵尸时,我的应用程序崩溃,malloc_history显示了一堆alloc / free与dateformat和其他日期相关的文本。这是一个alloc
的例子ALLOC 0x5e37930-0x5e3799b [size=108]: thread_accc52c0 |start | main |
UIApplicationMain | GSEventRun | GSEventRunModal | CFRunLoopRunInMode |
CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoObservers |
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ |
CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) |
CA::Transaction::commit() | CA::Context::commit_transaction(CA::Transaction*) |
CALayerLayoutIfNeeded | -[CALayer layoutSublayers] | -[UITableView layoutSubviews]
| -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] | -
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] | -
[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:]
| -[EventsTableController tableView:cellForRowAtIndexPath:] | -[NSDateFormatter
dateFromString:] | -[NSDateFormatter getObjectValue:forString:errorDescription:]
| getObjectValue | CFDateFormatterCreateDateFromString |
CFDateFormatterGetAbsoluteTimeFromString | udat_parse |
icu::DateFormat::parse(icu::UnicodeString const&, icu::ParsePosition&) const |
icu::SimpleDateFormat::parse(icu::UnicodeString const&, icu::Calendar&,
icu::ParsePosition&) const | icu::SimpleDateFormat::subParse(icu::UnicodeString
const&, int&, unsigned short, int, signed char, signed char, signed char*, int&,
icu::Calendar&, int) const | icu::SimpleDateFormat::parseInt(icu::UnicodeString
const&, icu::Formattable&, int, icu::ParsePosition&, signed char,
icu::NumberFormat*) const | icu::DecimalFormat::parse(icu::UnicodeString const&,
icu::Formattable&, icu::ParsePosition&) const |
icu::DecimalFormat::parse(icu::UnicodeString const&, icu::Formattable&,
icu::ParsePosition&, signed char) const | icu::DecimalFormat::subparse(icu::UnicodeString const&,
icu::UnicodeString const*, icu::UnicodeString const*, icu::UnicodeString const*,
icu::UnicodeString const*, signed char, signed char, icu::ParsePosition&,
icu::DigitList&, signed char*, unsigned short*) const |
icu::DecimalFormat::compareSimpleAffix(icu::UnicodeString const&, icu::UnicodeString
const&, int, signed char) | uprv_decNumberInvert | uprv_decNumberInvert |
icu::UnicodeSet::UnicodeSet(icu::UnicodeSet const&) | malloc | malloc_zone_malloc
提前致谢
答案 0 :(得分:1)
拥有NSDateFormatter的单个实例并重复更改格式是合法的,只要这只在一个线程中完成并且你保持你正在做的事情。
但是你应该只在init例程中创建一次NSDateFormatter - 不要在每个使用它的例程中创建它。并确保在dealloc例程中删除格式化程序。