Предварительная загрузка 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мб. Все маленькие атласы предварительно загружены в последний массив.

0 ответов

Другие вопросы по тегам