2012-11-04 23 views
2

我使用UIAlertview來輸入一些文本,它工作正常。 但是,在警報視圖關閉後,在警報視圖打開之前(從9MB到26 MB),內存仍有超過17MB的增加。我使用儀器分配來測量堆內存和活動監視器來測量它。他們都顯示了類似的結果。當我切換到其他應用程序時,由alertview增加的內存將降低到適當的水平。這是正常的嗎?我的環境是iPhone4 + iOS6。 這是一些嘗試的代碼。iPhone UIAlertview放棄內存

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"input caption" message:@"text" 
                delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"OK", nil]; 
    [alert show]; 
    [alert release]; 

謝謝。


親愛的函數naveed S和呼嚕聲 非常感謝你。 我不確定我是否按照你的建議正確。但是我使用Activity監視器觀看Real mem,在alertview關閉後內存仍然增加大約20 MB。我刪除後[警報顯示] [警報發佈],和我寫

[alert show]; 
//[alert release]; 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES]; 
    [alertView autorelease];              }  

Moreovre,內存減少時,應用程序進入後臺模式後,我按HOME。 (這與我以前的代碼相似)。我怎樣才能正確地看到放棄的內存。我甚至不知道如何以正確的方式觀看它.....

順便說一句,我的原始代碼按照這裏的帖子。 Uialertview and memory management

+2

我不認爲你應該看到由於UIAlertView導致的20MB內存浪涌。必須有其他事情發生.... –

+0

我使用樂器活動監視器來查看真實的mem,它顯示9.20 MB之前顯示alertview,但它顯示關閉alertview後26 MB。我繼續這樣做,真正的內存節目穩定地靠近26MB。當我打開safari或按回家時,它顯示11.6MB。我猜iOS會爲alertview或textfield做一些內存緩存(在alertview中有一個文本框)。切換到其他應用程序時,此緩存將減少。總之,我認爲這是不正常的,但我不怎麼解決它。 –

+0

警報關閉時調用哪些代碼? – CodaFi

回答

1

首先,你應該自動釋放你的alertView。 -alertView:didDismissWithButtonIndex:UIAlertView調用,因此當您的方法返回時,alertView對象應該仍然有效(不是-release'd)。

更重要的是,轉換成ARC並設有手動-retain-release-autorelease完成;)

如果你不轉換爲ARC,這樣做:請從代碼 - 釋放你的原職,在您的-alertView:didDismissWithButtonIndex:方法中取消對//CRASH的註釋並將-release更改爲-autorelease

+0

PLZ查看以下答案,我不確定它是否有效... –

+0

親愛的Naveed S和Purr,非常感謝。我不確定我是否正確地遵循了您的建議。但是我使用Activity監視器觀看Real mem,在alertview關閉後內存仍然增加大約20 MB。我在[alert show]後刪除[alert release],並且我寫了 [alert show]; // [警報發佈]; (無效)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {[alertView dismissWithClickedButtonIndex:buttonIndex animated:YES]; [alertView autorelease]; –