当我运行乐器时,我注意到一些堆增长。没有泄漏但是有一些内存没有清除,这看起来是由于我使用核心数据造成的。
从堆栈跟踪中看来,当我保存托管对象时会发生增长。
这就是我创建托管对象的方式:
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;
}
我是否正在对导致此问题的核心数据做错?关于如何阻止堆增长的任何建议?
答案 0 :(得分:0)
一切看起来都不错。记忆的最小增加可以被认为是正常的,应该是预期的。