CGContextDrawPDFPage nehmen große Mengen an Speicher

Ich habe eine PDF Datei, die ich zeichnen möchte, in outline form. Ich will zeichnen Sie die ersten mehreren Seiten auf das Dokument, jede auf Ihre eigene UIImage auf einer Taste, so dass, wenn geklickt wird, wird das Haupt-display navigieren Sie zu der angeklickten Seite.

Jedoch CGContextDrawPDFPage zu sein scheint, mit reichlich Speicher, wenn Sie versuchen zu zeichnen die Seite aus. Obwohl das Bild eigentlich nur um 100px hoch, stürzt die Anwendung beim zeichnen einer Seite in allem, was nach Instrumenten, vergibt etwa 13 MB Speicher nur für die eine Seite.

Hier ist der code für die Zeichnung:

//Note: This is always called in a background thread, but the autorelease pool is setup elsewhere
+ (void) drawPage:(CGPDFPageRef)m_page inRect:(CGRect)rect inContext:(CGContextRef) g { 
    CGPDFBox box = kCGPDFMediaBox;
    CGAffineTransform t = CGPDFPageGetDrawingTransform(m_page, box, rect, 0,YES);
    CGRect pageRect = CGPDFPageGetBoxRect(m_page, box);

    //Start the drawing
    CGContextSaveGState(g);

    //Clip to our bounding box
    CGContextClipToRect(g, pageRect);   

    //Now we have to flip the origin to top-left instead of bottom left
    //First: flip y-axix
    CGContextScaleCTM(g, 1, -1);
    //Second: move origin
    CGContextTranslateCTM(g, 0, -rect.size.height);

    //Now apply the transform to draw the page within the rect
    CGContextConcatCTM(g, t);

    //Finally, draw the page
    //The important bit.  Commenting out the following line "fixes" the crashing issue.
    CGContextDrawPDFPage(g, m_page);

    CGContextRestoreGState(g);
}

Gibt es eine bessere Art und Weise zu zeichnen, dieses Bild, dass nicht riesige Mengen Speicher?

  • Wie sind Sie zum aktualisieren der Ansicht nach dem dieser thread abgeschlossen?
InformationsquelleAutor Ed Marty | 2010-06-04
Schreibe einen Kommentar