Предварительная загрузка SKTextureAtlases вызывает проблемы с памятью и сбой
Я делаю игру типа приключений. При создании этой игры у меня возникли утечки памяти, поэтому я решил создать предварительный загрузчик, который я назвал SKPreloader.
В моем GameViewController:
_preloader = [[SKPreloader alloc]init];
[_preloader setDelegate:self];
[_preloader preloadTextureAtlasesForScene:1];
В SKPreloader:
(void)preloadTextureAtlas:(SKTextureAtlas *)atlas{
[atlas preloadWithCompletionHandler:^void {
NSLog(@"laden...");
if([atlas isEqual:_atlasFotoDistort]){
NSLog(@"loaded foto");
[self preloadTextureAtlas:_atlasFotoDistortWoman];
}else if([atlas isEqual:_atlasFotoDistortWoman]){
NSLog(@"loaded foto woman");
[self preloadTextureAtlas:_atlasTV];
}else if ([atlas isEqual:_atlasTV]){
NSLog(@"loaded tv1");
[self preloadTextureAtlas:_atlasTV2];
}else if ([atlas isEqual:_atlasTV2]){
NSLog(@"loaded tv2");
[self preloadTextureAtlas:_atlasTV3];
}else if ([atlas isEqual:_atlasTV3]){
NSLog(@"loaded tv3");
[self preloadTextureAtlas:_atlasDementia];
}else if ([atlas isEqual:_atlasDementia]){
NSLog(@"loaded dementia");
[self preloadTextureAtlas:_atlasDementiaKeuken];
}else if ([atlas isEqual:_atlasDementiaKeuken]){
NSLog(@"loaded keuken");
[self preloadTextureAtlas:_atlasGordijnLinks];
}else if ([atlas isEqual:_atlasGordijnLinks]){
NSLog(@"loaded gordijnlinks");
[self preloadTextureAtlas:_atlasGordijnRechts];
}else if ([atlas isEqual:_atlasGordijnRechts]){
NSLog(@"loaded gordijnrechts");
[self preloadTextureAtlas:_atlasHond];
}else if ([atlas isEqual:_atlasHond]){
NSLog(@"loaded hond");
[self preloadTextureAtlas:_atlasHondKop];
}else if ([atlas isEqual:_atlasHondKop]){
NSLog(@"loaded hond kop");
[self preloadRestOfTextureAtlasesForScene:1];
}
}];
}
- (void)preloadRestOfTextureAtlasesForScene:(int)sceneNumber{
NSArray *arrayOfAtlases = [self restofTextureAtlasesForScene:sceneNumber];
[SKTextureAtlas preloadTextureAtlases:arrayOfAtlases withCompletionHandler:^void{
NSLog(@"loaded all");
[_delegate didFinishPreloading];
}];
}
Тексты с префиксом _ являются SKTextureAtlases.
Делегат читается в GameViewController и запускает первую сцену. Когда SKPreloader достигает метода preloadRestOfTextureAtlases, использование памяти составляет 240 МБ и остается там, что в конечном итоге вызывает сбой.
Любая помощь о том, как я мог решить эту проблему и по-прежнему предварительно загружать атласы?
Дополнение: самый большой атлас 16мб. Все маленькие атласы предварительно загружены в последний массив.