停止与核心数据托管对象相关的堆增长
Posted
技术标签:
【中文标题】停止与核心数据托管对象相关的堆增长【英文标题】:Stopping Heap Growth Related to a Core Data Managed Object 【发布时间】:2012-12-19 15:45:54 【问题描述】:我在运行仪器时注意到一些堆增长。没有泄漏,但有一些内存未清除,这似乎是我使用核心数据造成的。
从堆栈跟踪看来,增长发生在我保存托管对象时。
这就是我创建托管对象的方式:
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】:一切看起来都不错。内存的最小增加可以认为是正常的,应该是可以预期的。
【讨论】:
以上是关于停止与核心数据托管对象相关的堆增长的主要内容,如果未能解决你的问题,请参考以下文章