Frage

In Ordnung ich eine Welt von Schwierigkeiten habe dieses Speicherleck aufzuspüren. Wenn dieses Skript ausgeführt sehe ich keine Erinnerung undicht, aber meine ObjectAlloc klettert. Instrumente Punkte CGBitmapContextCreateImage> create_bitmap_data_provider> malloc, diese 60% meiner ObjectAlloc in Anspruch nimmt.

Dieser Code mehrmals mit einem NSTimer genannt.

Wie kann ich klar, dass reUIImage, nachdem ich es zurückgeben?

... oder Wie kann ich es so machen, dass UIImage imageWithCGImage nicht meine ObjectAlloc bauen?

    //I shorten the code because no one responded to another post
    //Think my ObjectAlloc is building up on that retUIImage that I am returning
    //**How do I clear that reUIImage after the return?**

-(UIImage) functionname {
    //blah blah blah code
    //blah blah more code

    UIImage *retUIImage = [UIImage imageWithCGImage:cgImage];
            CGImageRelease(cgImage);

            return retUIImage;
    }
War es hilfreich?

Lösung

Diese Methode Sie verwenden instanziiert ein UIImage und legt es als Autorelease. Wenn Sie zu bereinigen diese wollen, müssen Sie den Pool regelmäßig leeren

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
..
..
..
[pool release];

Beachten Sie, dass diese verschachtelt werden können:

NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
..
..
..
[pool2 release];
[pool1 release];

Gängige Praxis ist für Schleifen dieses herum zu platzieren und andere Methoden, die viele Autoreleased Objekte machen.

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for (Thing *t in things) {
  [thing doAMethodThatAutoreleasesABunchOfStuff];
}
[pool release]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top