我的应用程序运行良好,看起来不错。但是在我用 Instruments 运行它之后,我发现它上面有大量的泄漏。有几件事似乎没有错,就像下面的代码一样。代码真的有问题吗?任何一个词都会对我有帮助。
@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
Run Code Online (Sandbox Code Playgroud)
某些操作可能会导致框架存储永远不会发布的静态数据结构。例如, 的实现-initWithContentsOfFile:可能会在第一次使用时设置一些内部设置,然后直到应用程序终止,可能是出于性能优化的原因。这不是真正的泄漏,但泄漏检测软件有时会将其标记为此类。框架本身也有可能存在导致内存泄漏的错误,但这种情况很少见,特别是对于像 NSDictionary 这样的完善类。
你的代码没有泄漏,据我所知是正确的。如果您的-dealloc方法被调用(添加日志语句以确保),那么您正在履行合同的一部分,任何泄漏都不是您的错。
使用 ObjectAlloc 工具可能是值得的,因为这可以让您更好地了解已分配和闲置的对象。