2013-04-15 91 views
1

我創建了一個非常簡單的iPhone應用程序,具有單一視圖和一個帶有動作顯示UIAlertView的UIButton。 我使用下面的代碼UIAlertView內存問題

- (IBAction)showAlert:(id)sender { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

儀器分配工具截屏附後。 enter image description here

在圖像中,低存儲器分配示出了應用程序正在運行,而不顯示UIAlertView,和高的峯顯示了內存使用我已經表明UIAlertView後,即使我已經駁回UIAlertView並釋放它,但它繼續顯示相同的存儲器狀態和生活對象(高達50,000)。但是當我按回家的按鈕應用程序在後臺進行,你可以看到附加的圖像生活對象和使用的內存減少。

問題:

我的代碼有什麼問題?

爲什麼即使在發佈UIAlertView後,它顯示高內存分配和活動對象?

爲什麼我必須去背景釋放記憶和活物?

回答

1

我不會擔心太多,除非這是您的應用中的主要內存瓶頸,或者除非每個UIAlertView累積增加更多內存。

您的代碼是正確的。但是,即使您釋放UIAlertView,用戶界面系統也會保留它,至少在您解除警報之前。除了UIAlertView本身外,它還分配顯示警報所需的圖形資源。在關閉警報後,它取決於autorelease循環何時啓動,以及緩存參數,是否以及何時釋放內存。

當您按下主頁按鈕時,您的應用程序將轉到後臺,並且作爲該內存釋放的一部分被強制執行。也就是說,緩存被清空,自動釋放週期運行等

+0

其實我正在其他應用程序,我在做內存優化使用儀器工具,和uialertview相當大增加生活對象,不要減少使用,直到我按主頁按鈕。所以我想解決這個問題。 –

+1

我很好奇,於是寫了一個小測試程序。在我的測試中,只有第一個UIAlertView增加了內存,而沒有增加內存。而增加的只有25萬,所以沒有什麼可擔心的。例如,它可能會緩存UIAlertView的背景圖像。 – fishinear

+0

無論您在應用程序上花費多少時間,首先都會增加,但不會降低。在我的測試應用程序中,在第一次UIAlertView顯示之前生存的字節數爲670KB(8285個活動對象),並且在顯示警報生存字節後爲3.50MB(48,000個活體) –