2014-03-19 36 views
1

我對內存利用問題感到很困惑。加載各種圖像(從Parse.com檢索)後,我的應用程序崩潰。如何使用'PFImageView'優化內存?

爲了使這個更簡單我的應用程序包括顯示某些類別的圖像,所以這就是我所擁有的: 首先給您一個'PFQueryTableView',您選擇一個'cell'並將其推送到加載的'ScrollView' 10'PFImageView',當然,在通過圖片說出5個以前的單元格後,由於內存壓力或內存錯誤,我的應用程序崩潰。

我使用下面的代碼,我認爲應該幫助緩存數據,而不是下載的設備:

- (PFQuery *)queryForTable{ 

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
query.cachePolicy = kPFCachePolicyNetworkOnly; 

return query; 

因爲內存持續上升也不會做任何事情,所以我嘗試添加自定義緩存設置:

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 

[PFQuery clearAllCachedResults]; 
} 

查看後刪除任何數據..但是,當我測試應用程序,使用的內存只是繼續上升,每個單元格點擊,直到它達到約550 MB,然後崩潰...

我也試過釋放我的PFImageViews,但不能,因爲我使用ARC和它應該自動執行。 所以我的問題是,我錯過了什麼?如何在不佔用設備內存的難以置信的數量的情況下將其設置爲查看圖像?

任何幫助將不勝感激!感謝您在閱讀時間,如果這真的是一個基本問題,我表示歉意。

+1

如果你不想被拒絕,寫出清晰簡明的問題將比寫作更有助於你不想被拒絕。 –

+0

謝謝,我會編輯該部分。我不得不問,我的問題是否清楚,還是應該編輯? – adriennemhenry

回答

0

kPFCachePolicyNetworkOnly意味着與你看起來相反的情況。這意味着應用程序不應該使用緩存來查詢結果,但始終使用網絡下載圖像。所以,如果您已經在較早的嘗試中獲取了圖像,它現在仍會再次下載圖像。

要達到您的意思,請使用kPFCachePolicyCacheThenNetwork。這將強制應用程序首先檢查緩存,然後僅在未在緩存中找到時才從解析中獲取緩存。

這個設置是爲了減少網絡使用,而不是內存,所以我懷疑它會爲你的內存問題做很多事情。

如果您仍然遇到內存問題,請考慮使用縮小版圖像進行瀏覽,或者實施基於PageViewController的瀏覽器。

+0

你是對的,沒有太多的記憶。我想我會用'UICollectionView'來得到更清晰的結果。謝謝回答! – adriennemhenry

2

發佈iOS6,viewDidUnload已棄用。 Docs說:「視圖不再在低內存條件下清除,所以這個方法永遠不會被調用」 - 如果斷點出現,我會感到驚訝。

您可以明確設置爲nil任何不再需要的對象,使內存得以回收嗎?

您可能想切換到連續旋轉UIScrollView方案。任何時候你只能加載三張圖片;前一個,現在和下一個。

如果向左滑動,「left」變爲「current」,「current」變爲「right」,「right」丟棄,並加載新的「left」。

如果向右滑動,「右」變爲「當前」,「當前」變爲「左」,「左」丟棄並且加載新的「右」。

這是old answer我寫了關於製作循環視圖控制器的更多細節。

+0

感謝您的快速響應!我之前嘗試過連續的'UIScrollView',但無法弄清楚如何設置代碼,因爲我使用的是Parse.com後端,但我會再試一次! – adriennemhenry