停止与核心数据管理对象相关的堆增长

时间:2012-12-19 15:45:54

标签: objective-c ios xcode core-data instruments

当我运行乐器时,我注意到一些堆增长。没有泄漏但是有一些内存没有清除,这看起来是由于我使用核心数据造成的。

instruments screenshot

从堆栈跟踪中看来,当我保存托管对象时会发生增长。

这就是我创建托管对象的方式:

ScramblerGame *game = (ScramblerGame *)[NSEntityDescription insertNewObjectForEntityForName:@"ScramblerGame" inManagedObjectContext:self.context];
game.time = [NSNumber numberWithInt:self.time];
game.score = 0; //etc...

ScramblerGame是一个托管对象子类,直接从数据模型创建,无需修改。

这是我访问和更新托管对象的方式:

self.game.score = [NSNumber numberWithInt:[self.game.score intValue] + score];

self.game是托管对象的另一个类中的弱引用。

这是在游戏结束时调用的方法,用于保存或删除数据。这也是我在引用图像的堆栈跟踪中调用的最后一个方法,这导致堆增长。

-(void)saveAndHandleGameData:(BOOL)stillPlaying{
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextObjectsDidChangeNotification object:nil];

//save the data to disk
self.game.inProgress = [NSNumber numberWithBool:stillPlaying];
SCAppDelegate *appDelegate = ((SCAppDelegate *)[[UIApplication sharedApplication] delegate]);
NSManagedObjectContext *context = appDelegate.managedObjectContext;

if([self.game.score intValue] == 0)
    [context deleteObject:self.game];
[context save:nil];
self.game = nil;

}

我是否正在对导致此问题的核心数据做错?关于如何阻止堆增长的任何建议?

1 个答案:

答案 0 :(得分:0)

一切看起来都不错。记忆的最小增加可以被认为是正常的,应该是预期的。