インストゥルメントを実行すると、ヒープがいくらか増加していることに気づきました。リークはありませんが、コア データの使用が原因と思われるクリアされていないメモリがいくつかあります。
スタック トレースから、管理対象オブジェクトを保存すると成長が起こるようです。
これは私が管理対象オブジェクトを作成する方法です:
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;
}
これを引き起こしているコアデータに何か問題がありますか? ヒープの成長を止める方法について何かアドバイスはありますか?