在iOS 8.1下,我在使用CGContextDrawPDFPage将PDF页面渲染到图形上下文时出现内存泄漏。它并不是在模拟器中发生的,但每次我都会在iPad Air上获得数百个272字节的malloc内存泄漏。如果我注释掉CGContextDrawPDFPage,泄漏就会消失。
有没有其他人得到类似的行为?
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)data);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(dataProvider);
CGPDFPageRef page;
// Grab the PDF page
page = CGPDFDocumentGetPage(pdf, pageNo + 1);
UIGraphicsBeginImageContext(aRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, aRect.size.height);
CGContextScaleCTM(context, 1, -1);
CGContextDrawPDFPage(context, page); // <- LEAKING?!?!?
// Would create the new UIImage from the context
//image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGPDFDocumentRelease(pdf);
CGDataProviderRelease(dataProvider);
这是一个堆栈跟踪(反向):
的malloc
38.58 MB 36.7%148743 std :: __ 1 :: list&gt; :: list(std :: __ 1 :: list&gt; const&amp;)
19.61 MB 18.6%75610 std :: __ 1 :: vector CG :: Path :: Subpath CG :: Allocator
19.61 MB 18.6%75610 void std :: __ 1 :: vector&gt; :: __ push_back_slow_path(CG :: Path :: Subpath&amp;&amp;)
19.61 MB 18.6%75610 CG :: Path :: Sequence :: move_to_point(CGPoint const&amp;,CGAffineTransform const *)
19.61 MB 18.6%75610 CGPathMoveToPoint
19.59 MB 18.6%75506 TTrueTypeQuadOutlineContext :: AddPoint(bool,int,int)
19.59 MB 18.6%75506 TTrueTypeFontHandler :: RenderGlyph(unsigned short,TTrueTypeQuadOutlineContext&amp;,unsigned int)const
19.59 MB 18.6%75506 TTrueTypeFontHandler :: GetOutlinePath(unsigned short,TGlyphOutlineBatch const&amp;)const
19.59 MB 18.6%75506 FPFontCopyGlyphPath
19.59 MB 18.6%75506 CGFontCreateGlyphPath
19.59 MB 18.6%75506 CGFontCreateGlyphBitmap
19.59 MB 18.6%75506 CGGlyphBuilder :: create_missing_bitmaps(CGGlyphIdentifier const *,unsigned long,CGGlyphBitmap const **)
19.59 MB 18.6%75506 render_glyphs
19.59 MB 18.6%75506 draw_glyph_bitmaps
19.59 MB 18.6%75506 ripc_DrawGlyphs
19.59 MB 18.6%75506 draw_glyphs
19.57 MB 18.6%75434 draw_glyphs
19.55 MB 18.6%75359 simple_draw
19.55 MB 18.6%75359 CGPDFTextLayoutDrawGlyphs
19.55 MB 18.6%75348 op_TJ
19.55 MB 18.6%75348 pdf_scanner_handle_xname
19.55 MB 18.6%75348 CGPDFScannerScan
19.55 MB 18.6%75348 CGPDFDrawingContextDrawPage
19.55 MB 18.6%75348 pdf_page_draw_in_context
19.55 MB 18.6%75348 CGContextDrawPDFPage
答案 0 :(得分:0)
是的,您需要致电UIGraphicsEndImageContext()
以匹配对UIGraphicsBeginImageContext()
的每次通话。
完成上下文修改后,必须调用
UIGraphicsEndImageContext
函数用于清理位图绘图 环境并从顶部删除图形上下文 上下文堆栈。您不应该使用UIGraphicsPopContext
功能 从堆栈中删除此类上下文。