簡體   English   中英

iOS4 - 快速上下文切換

[英]iOS4 - fast context switching

當應用程序進入后台運行狀態時,有多少臟內存使用是好的。 在蘋果視頻中,我們提到應盡可能減少臟記憶。

但在我的應用程序中,我使用導航控制器來推送和彈出視圖。 從大約20個不同頁面移動后,臟內存使用量達到30 MB左右。

同樣在“dismissModalViewControllerAnimated”和“popViewControllerAnimated”上,不調用dealloc。

我有兩個疑問:

  1. 上線可以接受多少臟內存?
  2. 什么是導航控制器的替代支持后退按鈕?

提前致謝。

如果沒有調用dealloc,你仍然可以保留你的UIViewControllers。

也許你在這些UIViewControllers中設置委托或其他類來保留和引用備份樹(循環引用)。

一種可以調試的方法是在UIViewController中重載retain和release,並設置一個斷點並記錄retainCount。

這是一個我離開的神奇片段,當我無法弄清楚為什么我還在保留某些東西時,這對我幫助很大。

- (id)retain
{
    NSLog(@"retain \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    return [super retain];
}
- (void)release
{
    NSLog(@"release \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    [super release];
}
- (id)autorelease
{
    NSLog(@"autorelease \t%s \tretainCount: %i", __PRETTY_FUNCTION__ , [self retainCount]);
    return [super autorelease];
}

__PRETTY_FUNCTION__是CLang中一個特殊的隱藏宏,它提供了一個非常好的Objective-C函數名作為char數組。

  1. 當iOS開始耗盡內存時,它會嘗試終止使用最多內存的后台進程。 因此,雖然沒有絕對好的數字,但最大限度地減少使用多少內存是一個好主意。 將其保留在30Mb等於保證您的應用程序將被殺死
  2. 除非您想要更改UI,否則無需使用UINavigationController處理后退按鈕的任何其他內容。 我認為這里的問題是如果沒有調用pop或dismiss上的dealloc ,你就會發生內存泄漏

幾乎所有視圖控制器都有有效緩存的數據,並且可以在應用程序返回前台時重新生成。 想一想當應用程序運行時收到內存警告時釋放的數據。 (你正在回應內存警告,對嗎?)這是你進入后台時應該釋放的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM