2010-10-12 89 views
2

我一直在努力嘗試爲iPhone/iPad製作一個可用的PDF閱讀器,但事情不會停止進食內存。似乎所有使用CGContextDrawPDFPage繪製的頁面都在內部緩存並且從未發佈。CGPDF iPhone/iPad內存問題

我不是唯一一個這樣的問題:從第一個線程http://lists.apple.com/archives/quartz-dev/2010/Apr/msg00025.html

http://web.archiveorange.com/archive/v/SEb6acvPicMB2NdIjEd3

一個反應:

如果這是我認爲它是,它不是」泄漏而不是緩存。不要在調用之間保留PDF文檔,請嘗試創建文檔,獲取和繪製頁面,然後在完成時釋放文檔。

我試過了,它解決了這個問題,但它太慢了。儘管以「正常」的方式進行(即對於每個抽籤沒有加載/釋放CGPDFDocument),但是工作得很好且相當快,直到我到達文檔的第4頁或第5頁並且它崩潰。

我已經GOOGLE了這個問題的年齡:每個人都有同樣的問題,但顯然沒有人得到它的工作。我發現的唯一樣本加載了一頁PDF,所以顯然一切正常,直到您加載一個文檔與多個頁面(當然,如果事情有圖像,它甚至更早崩潰)。這真讓我抓狂。

所以問題是:你在你的應用程序中如何處理PDF格式的CGPDF?任何幫助將不勝感激。謝謝。

回答

5

我目前的企業項目是基於一個PDF閱讀器。我沒有發佈CGPDFDocument,我可以通過一個14頁的蘋果pdf頁面,應用程序最大值爲30mb。我不能給你代碼,但我可以指出你在正確的方向。

我開始了類似的主題在這裏:Fast and Lean PDF Viewer for iPhone/iPad/iOs - tips and hints?

一些提示:

- 保存任何媒體到磁盤時即可。如果

- 使用大tileSizes渲染上TiledLayers

- 注意圖像將呈現比CGPDFPageRef

- 使用NSOperations更快提前做好準備
的時間頁面。

-Recycle頁面對象

-close任何打開的上下文,只要你不需要他們

-on接收內存警告釋放並重新加載DocRef

+0

謝謝回答,並鏈接到該線程,幫助了很多。 – pt2ph8 2010-10-13 12:13:36

+0

嗯我有一個問題,我們如何才能釋放並重新加載docref(CGPDFDocumentRef)..是這樣的CFRelease(docRef)然後重新加載是?創建(CGPDFDocumentCreateWithRUL ...)?我把它放在了內存警告部分,它使我的應用程序崩潰。我應該如何做到這一點?嗯 – otakuProgrammer 2012-12-19 12:48:25