-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 回答