首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >initWithContentsOfFile的泄漏问题

initWithContentsOfFile的泄漏问题
EN

Stack Overflow用户
提问于 2010-02-18 13:43:17
回答 1查看 2.2K关注 0票数 0

我的应用程序运行得很好,看起来也不错。但是在我用Instruments运行它之后,我发现它有大量的漏洞。有几件事看起来没有问题,就像下面的代码。代码真的有问题吗?任何一个单词都会对我有帮助。

代码语言:javascript
复制
@interface GameData : NSObject
{
    NSDictionary* _data;
    NSDictionary* _localData;
}
@end

@implementation GameData

- (id) init
{
    NSString* dataFilename = [[NSBundle mainBundle]pathForResource:@"GameData" ofType:@"plist"];
    _data = [[NSDictionary alloc]initWithContentsOfFile:dataFilename]; // Leaks 48 bytes

    NSString* localDataFilename = [[NSBundle mainBundle]pathForResource:@"GameData-Local" ofType:@"plist"];
    _localData = [[NSDictionary alloc]initWithContentsOfFile:localDataFilename];

    return self;
}

- (void) dealloc
{
    [_data release];
    [_localData release];

    [super dealloc];
}

@end
EN

回答 1

Stack Overflow用户

发布于 2010-02-19 10:32:12

一些操作可能会导致框架存储从未发布的静态数据结构。例如,-initWithContentsOfFile:的实现可能会在第一次使用时设置一些内部设置,然后这些设置会一直保留到应用程序终止,可能是出于性能优化的原因。这不是真正的泄漏,但泄漏检测软件有时会将其标记为泄漏。框架本身也有可能存在导致内存泄漏的bug,但这种情况很少见,特别是对于像NSDictionary这样成熟的类。

你的代码没有泄露,据我所知它是正确的。如果您的-dealloc方法正在被调用(一定要添加一个日志语句),那么您正在履行合同中您的一部分,任何泄漏都不是您的错。

使用ObjectAlloc工具可能是值得的,因为它可以让您更好地了解分配了哪些对象并挂起了这些对象。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2286565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档