-1

plist から多くの注釈をロードしますが、すべて正常にロードされますが、NSCachesDirectory メモリ リーク ツールからロードすると、リークが表示されます。URLからロードすると、リークはありません。プロジェクトでARCを使用しています。

メモリーリーク

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *path = [[documentPaths lastObject] stringByAppendingPathComponent:@"test.plist"];
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; // leaking here

漏れない

NSString *urlStr = [[NSString alloc] 
                    initWithFormat:@"http://www.domain.com/test.plist" ];

NSURL *url = [NSURL URLWithString:urlStr];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfURL:url];
4

1 に答える 1

0

計測器が一方のリークを表示し、他方のリークを表示しない理由はわかりませんが、これらのコード スニペットでは表されない何らかの問題が原因であることはほぼ確実です。URL メソッドを使用するだけで確認できます (とにかく推奨される方法であり、新しいコードのパスではなくファイル URL を使用することをお勧めします)。

NSError* error = nil;
NSURL* fileURL = [[[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error] URLByAppendingPathComponent:@"test.plist"];
if( !fileURL ) { /* deal with error */ }
// If this still leaks, it's due to the way your code is structured and
// you will have to provide more details.
NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfURL:fileURL];
于 2012-10-01T20:46:29.563 に答える