所以我安裝了我的應用程序在我的iPad上,它由於內存問題崩潰。我想這是因爲我使用的是非常大的圖像文件,所以我回過頭來減少它們,通過調整它們大小然後使用PNGCrush來減少大約75%的尺寸。圖片問題的iPad - 內存問題
現在,至於運行程序,如果我有我的4個單獨的選項卡中的每一個的背景圖像,如果我每次切換標籤時將圖像設置爲Null,還是應該讓它們保持設置, ?我有一個頁面上有幾十個圖像,因爲它們起到按鈕的作用,從我聽到的聲音來看,這聽起來像是我應該在看不到該頁面時清除它們。那是對的嗎?
現在,當我啓動時,我加載了應用程序中所有內容的所有圖像:「現在加載並完成它」的心態,但從我一直在閱讀的內容中導致內存因爲沒有太多的內存可供使用。這是否意味着每當我切換標籤或視圖時,我想清除那些不可見圖像中的所有圖像,然後在我們回到它們時重新加載它們?這會導致性能的提高嗎?或者至少可以防止崩潰?我的程序在模擬器中工作,但是當我在ipad上運行它時,它只是爆炸=/
謝謝!
編輯:我使用MonoTouch的BTW,因此一切都在C#
UIImage BG = UIImage.FromFile("Images/Makes/explosion.png");
UIImage basic = UIImage.FromFile("Images/Models/camaro.png");
UIImage advance = UIImage.FromFile("Images/search.png");
AdvancedSearchButton.SetBackgroundImage(advance, UIControlState.Normal);
ImageSearchButton.SetBackgroundImage(basic, UIControlState.Normal);
MainBG.Image = BG;
BG.Dispose();
basic.Dispose();
advance.Dispose();
現在我知道在普通的C#dispose()
實際上並不「免費」的記憶,但我讀的東西,指出它被轉換到"release"
,當它編譯到obj-c時,基本上可以釋放這些對象。
此外,我想知道是否需要dispose()
個別按鈕和圖像後,我不再查看它們。我只是將圖像設置爲NULL,但這給了我錯誤。
MainBG.Dispose();
AdvancedSearchButton.Dispose();
ImageSearchButton.Dispose();
非常感謝您的幫助!
EDIT2:
所以我只是想上面的代碼和背景圖像和其他一切都還在那裏好像沒有什麼實際得到清除出現。建議?
「因此,一旦某物被加載到內存中,它會一直保留在內存中,直到您的代碼明確釋放它」 這是否意味着如果我在選項卡1中設置背景,我會希望「釋放它」通過設置爲空?這項工作是否還有其他我需要做的事情? 我理解釋放/釋放記憶的概念,我只是不知道如何在這種情況下做到這一點。 我的應用程序的大部分只是帶有圖像的按鈕。 – Adam 2010-07-30 14:45:31
在將指針設置爲NULL之前,您需要發送'release'消息到後備'NSImage'對象。 – 2010-07-30 14:48:54
所以基本上我會加載我的NSImage從我的文件,設置我的圖像,然後釋放NS圖像?當我切換到另一個標籤時,我會將該圖像設置爲空。 如果我回到那個標籤,我會再衝洗並重復。正確? – Adam 2010-07-30 15:17:19