UIGraphicsGetImageFromCurrentImagecontext memory-leak-mit-Vorschau

Ich versuche zu schaffen, Vorschau-Bilder der Seiten in einem PDF
aber ich habe einige Probleme mit der Freigabe von Speicher.

Schrieb ich ein einfaches test-Algorithmus, der Zyklen auf das problem,
die app stürzt in der Nähe des 40th iteration:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"myPdf.pdf"];
CFURLRef url = CFURLCreateWithFileSystemPath( NULL, (CFStringRef)pdfPath, kCFURLPOSIXPathStyle, NO );
CGPDFDocumentRef myPdf = CGPDFDocumentCreateWithURL( url );
CFRelease (url);
CGPDFPageRef page = CGPDFDocumentGetPage( myPdf, 1 );

int i=0;
while(i < 1000){

    UIGraphicsBeginImageContext(CGSizeMake(768,1024));
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
    CGContextFillRect(context,CGRectMake(0, 0, 768, 1024));
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, 0.0, 1024);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawPDFPage(context, page);
    CGContextRestoreGState(context);

    //--------------------------
    //The problem is here (without this line the application doesn't crash)
    UIImageView *backgroundImageView1 = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()];
    //--------------------------

    UIGraphicsEndImageContext();
    [backgroundImageView1 release];

    NSLog(@"Loop: %d", i++);
}

CGPDFDocumentRelease(myPdf);

Dem oben erwähnten Grundsatz scheint zu generieren, die ein Speicher-Leck,
allerdings Instrumente nicht zeigen, Probleme mit dem Speicher;

Kann ich Flucht aus dieser Art von Fehler?kann jemand mir erklären, in welcher Art und Weise?
Gibt es andere Möglichkeiten zu zeigen, eine Vorschau einer pdf-Datei?

UPDATE

Ich denke, das problem ist nicht die Veröffentlichung von UIImage erstellt, indem die Methode UIGraphicsGetImageFromCurrentImageContext() aber die Veröffentlichung UIImageView mit diesem erstellt autorelease Bild.

Habe ich aufgeteilt die code-Zeile in drei Schritten:

UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageView *myImageView = [[UIImageView alloc] init];
[myImageView setImage: myImage]; //Memory Leak

Den ersten und zweiten Zeilen nicht schaffen, Speicherlecks, so dass ich denke, dass die Methode UIGraphicsGetImageFromCurrentImagecontext ist nicht das problem.

Ich habe auch versucht, wie folgt, aber das problem besteht weiterhin:

UIImageView *myImageView = [[UIImageView alloc] initWithImage:myImage];

Ich denke, es ist ein memory leak in der Version eines UIImageView, die enthält ein UIImage mit dem autorelease-Eigenschaft.

Ich zu schreiben versucht, mein Objekt UIImageView Erben ein UIView wie in diesem thread.

Diese Lösung funktioniert, ist aber nicht besonders elegant, es ist ein workaround, ich würde es vorziehen, um das Objekt UIImageView die Lösung des Speicher-Problems.

InformationsquelleAutor der Frage Alessandro | 2011-02-25

Schreibe einen Kommentar