2010-08-23 7 views
0

Je fais des recherches parce que mon application viewer pdf continue à se briser autour de la page 4/5 en raison d'un poireau mémoire qui se produit chaque fois que vous tournez une page ...iphone CGPDFDocumentRef poireau mémoire énorme

Il se trouve que apple a un bug.

voir ici: https://devforums.apple.com/message/9077#9077

de ce que je comprends que vous avez à libérer & conserver le document pdf à chaque fois que vous changez de page.

mais je ne peux pas le faire fonctionner (ce code est dans une sous-classe de UIView):

- (void) drawInContext: (CGContextRef) ctx { 
CGPDFDocumentRelease(__pdfDoc); 
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
CGContextTranslateCTM(ctx, 0.0, self.bounds.size.height); 
CGContextScaleCTM(ctx, 1.0, -1.0); 
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pdfPage, kCGPDFCropBox, self.bounds, 0, true)); 
CGContextDrawPDFPage(ctx, pdfPage);NSLog(@"DONE!"); 
CGPDFDocumentRetain(__pdfDoc);} 
@end 

mon pdf est arrivé ici dans un viewController:

- (CGPDFPageRef) pdfPage: (NSInteger) index { 
if(! __pdfDoc) { 
__pdfDoc = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mybook" ofType:@"pdf"]]);} 
if(__pdfDoc) { 
size_t pdfPageCount = CGPDFDocumentGetNumberOfPages(__pdfDoc); 
index++; 
if(index < 1) 
index = 1; 
if(index > pdfPageCount) 
index = pdfPageCount; 
CGPDFPageRef page = CGPDFDocumentGetPage(__pdfDoc, index); 
return page;} 
return nil;} 

je peux » Je n'ai rien trouvé sur google et j'ai lu la documentation toute la journée.

Des idées?

Répondre

0

Ouais. Punaise. Vous devrez ouvrir/fermer le document complet lorsque vous dessinez une page. Suce.

(je pense cela est fixé dans 3.2.x)

+0

comment ???? je ne peux pas voir aucune information où – user422241

+0

je vais télécharger sdk 4.0 je vais vous dire si le bug est corrigé – user422241

+0

Wow - est-ce un post récent? Mais vous pourriez juste avoir raison. Il n'y a pas de Create: s etc qui indiquerait la propriété d'une page lors du dessin - Je suppose que toute la mémoire lors du dessin page par page est "accrochée" à la référence du document original (qui inclut en effet le mot Create, CGPDFDocumentCreateWithURL, qui serait indiquer la propriété)? D'une manière ou d'une autre, comment seriez-vous capable de libérer la mémoire des pages dont vous n'avez plus besoin si vous n'en avez jamais reçu la propriété exclusive? – Jonny