iphone - 仪器(泄漏)和 NSDateFormatter

标签 iphone objective-c memory-leaks malloc nsdateformatter

当我使用 Instruments Leaks 运行我的 iPhone 应用程序并使用 NSDateFormatter 解析一堆 NSDates 时,我的内存增加了大约 1mb 并保持不变,即使这些 NSDates 应该在解析后被释放(如果它们不是,我只是丢弃它们新)。

我认为 malloc(在下面我最重的堆栈跟踪中)可以成为 NSDate 的一部分,但我也认为它可能是仅在解析的某个中间步骤中使用的内存。有谁知道它是哪一个或如何找到它?

还有,有没有办法在 NSDate dealloc 上打断点,看看那 block 内存是否真的被回收了?

这是我的日期格式化程序解析这些日期的样子:

df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"EEE, d MMM yyyy H:m:s z"];

这是当内存增加并停留在那里时最重的堆栈跟踪:

   0 libSystem.B.dylib  208.80 Kb     malloc
   1 libicucore.A.dylib  868.19 Kb     icu::ZoneMeta::getSingleCountry(icu::UnicodeString const&, icu::UnicodeString&)
   2 libicucore.A.dylib  868.66 Kb     icu::ZoneMeta::getSingleCountry(icu::UnicodeString const&, icu::UnicodeString&)
   3 libicucore.A.dylib  868.67 Kb     icu::ZoneMeta::getSingleCountry(icu::UnicodeString const&, icu::UnicodeString&)
   4 libicucore.A.dylib  868.67 Kb     icu::DateFormatSymbols::initZoneStringFormat()
   5 libicucore.A.dylib  868.67 Kb     icu::DateFormatSymbols::getZoneStringFormat() const
   6 libicucore.A.dylib  868.67 Kb     icu::SimpleDateFormat::subParse(icu::UnicodeString const&, int&, unsigned short, int, signed char, signed char, signed char*, icu::Calendar&) const
   7 libicucore.A.dylib  868.67 Kb     icu::SimpleDateFormat::parse(icu::UnicodeString const&, icu::Calendar&, icu::ParsePosition&) const
   8 libicucore.A.dylib  868.67 Kb     icu::DateFormat::parse(icu::UnicodeString const&, icu::ParsePosition&) const
   9 libicucore.A.dylib  868.67 Kb     udat_parse
  10 CoreFoundation  868.67 Kb     CFDateFormatterGetAbsoluteTimeFromString
  11 CoreFoundation  868.67 Kb     CFDateFormatterCreateDateFromString
  12 Foundation  868.67 Kb     -[NSDateFormatter getObjectValue:forString:range:error:]
  13 Foundation  868.75 Kb     -[NSDateFormatter getObjectValue:forString:errorDescription:]
  14 Foundation  868.75 Kb     -[NSDateFormatter dateFromString:]

谢谢!

最佳答案

[df setDateFormat:@"EEE, d MMM yyyy H:m:s z"]; // Remove the `z`

当使用 z 选项时,在单次调用“dateFromString”后,868 Kb 将在 iPhone OS 2.2.1 或 3.1.2(更多 future )上永久分配。

可以在以下位置阅读带有源代码和日志文件的完整文章 http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/

关于iphone - 仪器(泄漏)和 NSDateFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117263/

相关文章:

javascript - 如何预防和防范闭包内存泄漏

iphone - 为什么我会收到此错误 "error: expected specifier-qualifier-list before ' NSManagedObjectContext'?

iphone - 使用对象作为 NSDictionary 的键

python - Objective-C 数组中的连续数字,如 Python 中的 range()

objective-c - 快速从给定路径初始化图像?

ios - FBSDKAccessToken currentAccessToken 为 nil

objective-c - 创建派生属性的最佳方法是什么

iphone - 核心数据切片绘图样式

c++ - 普通堆栈实现中的内存泄漏

python - 如何在我的 Python 程序中找到内存泄漏?