2010-10-17 2 views
0

Я использую класс LeavesView, доступный на GitHub от Tom Brow.NSArray просачивается с большим количеством изображений

На 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; 
} 

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

-(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 для массива изображений, [освобождение изображений]; закомментирован, и наоборот, если я не использую autorelease, я использую release в dealloc.

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

Любая помощь была бы оценена.

ответ

0

Я был в состоянии решить свои Эмори утечку:

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

Я видел значительное количество ф памяти извлеченного с помощью этого метода, и был в состоянии остановить crases, надеюсь, это поможет кому-то еще!

Смежные вопросы