initWithContentsOfFile泄漏问题

时间:2010-02-18 05:43:17

标签: xcode memory-leaks

我的应用程序运行良好,看起来不错。但在我用仪器运行之后,我发现它上面有很多泄漏。有几件事似乎没错,就像下面的代码一样。代码真的有问题吗?任何一个单词对我都有帮助。

@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

1 个答案:

答案 0 :(得分:4)

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

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

使用ObjectAlloc仪器可能是值得的,因为这可以让您更好地了解分配的对象和悬挂的对象。