2010-10-17 12 views
0

J'utilise la classe LeavesView disponible sur GitHub par Tom Brow.NSArray fuite avec beaucoup d'images

Sur l'iPad, j'ai 23 images à 1024x768 allant de 200-500KB (JPG). J'ai compressé les images autant que possible sans perte de qualité. Pour une raison quelconque, lorsque je init avec la liste des images, la mémoire diminue de manière significative, et finalement tombe en panne. Voici un code:

- (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; 
} 

Maintenant, dans ce morceau de code, j'ai utilisé autorelease. J'ai aussi essayé:

-(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]; 
} 

et bien sûr, dans cet exemple, je viens d'utiliser les images et pas d'autres objets que j'utilise dans la vue:

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

Lorsque j'utilise autorelease pour le tableau d'image, [libération d'images]; est commenté, et vice versa, si je n'utilise pas autorelease, j'utilise la libération dans dealloc.

Maintenant, lorsque j'ouvre la vue, la mémoire est rétablie comme prévu. C'est juste que les images semblent être un HOG en cours d'utilisation, et je ne connais pas une autre façon de ne pas utiliser le tableau d'images.

Toute aide serait grandement appréciée.

Répondre

0

j'ai pu résoudre mes fuites Emory avec:

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

j'ai vu une quantité importante f mémoire récupérée en utilisant cette méthode, et a été en mesure d'arrêter les crases, espérons que cela aidera quelqu'un d'autre!