NSArray утечка с большим количеством изображений - PullRequest
0 голосов
/ 17 октября 2010

Я использую класс LeavesView, доступный на GitHub от Tom Brow.

На iPad у меня есть 23 изображения размером 1024x768, размером от 200-500 КБ (JPG).Я сжал изображения настолько, насколько мог без потери качества.По какой-то причине, когда я запускаю со списком изображений, память значительно падает, и в конечном итоге падает.Вот некоторый код:

- (id)init {
    if (self = [super init]) {
        images = [[[NSArray alloc] initWithObjects:
              [UIImage imageNamed:@"001.jpg"],
              [UIImage imageNamed:@"002.jpg"],
              [UIImage imageNamed:@"003.jpg"],
              [UIImage imageNamed:@"004.jpg"],
              [UIImage imageNamed:@"005.jpg"],
              [UIImage imageNamed:@"006.jpg"],
              [UIImage imageNamed:@"007.jpg"],
              [UIImage imageNamed:@"008.jpg"],
              [UIImage imageNamed:@"009.jpg"],
              [UIImage imageNamed:@"010.jpg"],
              [UIImage imageNamed:@"011.jpg"],
              [UIImage imageNamed:@"012.jpg"],
              [UIImage imageNamed:@"013.jpg"],
              [UIImage imageNamed:@"014.jpg"],
              [UIImage imageNamed:@"015.jpg"],
              [UIImage imageNamed:@"016.jpg"],
              [UIImage imageNamed:@"017.jpg"],
              [UIImage imageNamed:@"018.jpg"],
              [UIImage imageNamed:@"019.jpg"],
              [UIImage imageNamed:@"020.jpg"],
              [UIImage imageNamed:@"021.jpg"],
              [UIImage imageNamed:@"022.jpg"],
              [UIImage imageNamed:@"cover.jpg"],
              nil] autorelease];
    }
    return self;
}

Теперь, в этом фрагменте кода, я использовал авто-релиз.Я также попытался:

-(void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    NSLog(@"memory warning");
    LeavesCache *lv =[LeavesCache alloc];
    [lv flush];
    [lv release];
    //[images release];
}

и, конечно, в этом примере я просто использую изображения, а не другие объекты, которые я использую в представлении:

-(void)viewDidUnload {
    [super viewDidUnload];
    images = nil;
}
-(void)dealloc {
    [images release];
    [super dealloc];
}

Когда я использую авто-релиз длямассив изображений, [релиз изображений];закомментировано, и наоборот, если я не использую autorelease, я использую release в dealloc.

Теперь, когда я открываю представление, память восстанавливается, как и ожидалось.Просто при использовании изображения кажутся HOG, и я не знаю другого способа не использовать массив изображений.

Любая помощь будет очень полезна.

1 Ответ

0 голосов
/ 17 октября 2010

Мне удалось устранить утечки памяти:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"001" ofType:@"jpg"]]

Я увидел значительное количество памяти, восстановленной с помощью этого метода, и смог остановить сумасшествие, надеюсь, это поможет кому-то другому!

...