2012-03-29 10 views
1

Zuordnung habe ich eine UIImage Kategorie Methode, tut dies:Leak wenn Bereiche eines UIImage zu UIImageView animationImages

- (UIImage *)subimageInRect:(CGRect)rect { 

    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect); 
    UIImage *answer = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return answer; 
} 

Und einer andere Kategorie Methode, die ein kurzes, breites Bild Würfel wird (wie ein Filmstreifen) in N mehr Bilder gleichmäßig proportioniert (wie Rahmen), wie folgt:

- (NSArray *)subimagesHorizontally:(NSInteger)count { 

    NSMutableArray *answer = [NSMutableArray arrayWithCapacity:count]; 
    CGFloat width = self.size.width/count; 
    CGRect rect = CGRectMake(0.0, 0.0, width, self.size.height); 

    for (int i=0; i<count; i++) { 
     [answer addObject:[self subimageInRect:rect]]; 
     rect = CGRectOffset(rect, width, 0.0); 
    } 
    return [NSArray arrayWithArray:answer]; 
} 

diese die Eigenschaft eines highlightedAnimationImages UIImageView zugeordnet sind, von denen mehrere in einer Tabelle enthalten sind. (und in der üblichen Weise gehandhabt werden. Storyboard Prototyp Zellen, markiert und zugegriffen in der Datenquelle mit [Zelle viewWithTag: ...]).

Es funktioniert gut, aber Lecks meldet ein Leck, sobald der Tisch geladen wird. Kann mir jemand helfen zu erkennen, was ich falsch mache?

enter image description here

+0

Vergessen zu erwähnen, dass dies in ARC ist. – danh

Antwort

1

Zunächst einmal der Code, den Sie posted nicht resizable Bilder erstellen und nicht resizableImageWithCapInsets: nicht nennen, so dass die ersten beiden Lecks vorhanden sind, um den Code irrelevant. In ähnlicher Weise passieren die letzten beiden Lecks in [UIImageView setAnimationImages], die den Code, den Sie nicht aufgerufen aufrufen. Ich würde sehen, ob die Lecks weiterhin gemeldet werden, nachdem Sie die Bildansicht aufgehoben haben. Wenn sich die Bildansicht in einer wiederverwendbaren Tabellenansichtszelle befindet, kann dies die Instrumente verwirren. In diesem Fall könnten die Animationsbilder nur zusammen mit der Tabellenansicht selbst freigegeben werden.

Kurz gesagt, sollten Sie sich die relevanten Methoden ansehen (übrigens können Instrumente auch einen Stack-Trace anzeigen, in dem das Leck vermutet wird). Der Code, den Sie gepostet haben, ist absolut in Ordnung, ARC oder nicht.

+0

Danke. Ich hätte das auch erwähnen sollen: Ich verwende nie eine der beiden Methoden resizableImageWithCapInsets: oder setAnimationImages. Ich vermutete (fälschlicherweise), dass mein Code diese indirekt verwendete. – danh

+0

Danke nochmal. Vielleicht sollte ich diese Frage noch einmal stellen: Glauben Sie, ich kann daraus schließen, dass, wenn meine App nicht in der Spalte der zuständigen Bibliothek erscheint, die entdeckten Lecks Simulationslecks sind und ich sie ignorieren sollte? – danh

+0

Sie sollten die Stack-Spuren der Lecks untersuchen. Es ist möglich, dass Sie eine UIKit-Ansicht verlieren, die intern veränderbare Bilder verwendet. Aber selbst wenn es wahr ist, hat es nichts mit dem Code zu tun, den Sie in Ihrer Frage gepostet haben. Dieser Code ist in Ordnung. – Costique

Verwandte Themen