Instruments Leaks を使用して iPhone アプリを実行し、NSDateFormatter を使用して多数の NSDates を解析すると、解析後にこれらの NSDates を解放する必要があるにもかかわらず、メモリが約 1 MB 増加し、残ります (新しくない場合は破棄します)。
malloc (以下の最も重いスタック トレース) は NSDate の一部になる可能性があると考えましたが、解析の中間ステップでのみ使用されるメモリである可能性も考えました。誰がそれがどれであるか、または見つける方法を知っていますか?
また、NSDate dealloc にブレークポイントを設定して、そのメモリが実際に回収されているかどうかを確認する方法はありますか?
これらの日付を解析するための私の日付フォーマッタは次のようになります。
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:]
ありがとう!