簡體   English   中英

如何判斷我的視圖控制器是否會從內存中釋放?

[英]How can I tell if my view controller will be released from memory?

這個問題是關於一個iPhone應用程序的,該應用程序使用Xcode的Master Detail模板和Core Data。 該應用程序支持iOS 5.1及更高版本。

我正在使用NSFetchedResultsController來管理UITableView中的項目,UITableView是UINavigationController堆棧中的第二個視圖控制器。 用戶從表視圖中進行選擇,並將堆棧中的第三個視圖控制器推入視圖。 非常標准的東西,我正在享受由NSFetchedResultsController提供的對Core Data對象的簡化訪問。

進入第三個視圖控制器后,用戶正在查看從表視圖的列表中選擇的一組數據。 我在此視圖中添加了幾個按鈕,以導航到上一組或下一組數據。 考慮一下在查看電子郵件時看到的iOS Mail應用程序和向上/向下按鈕。 您可以使用這些按鈕選擇列表中的下一封或上一封電子郵件,而無需導航回電子郵件列表(表視圖)。

我試圖找到一種最簡單的方法,當點擊這些下一個/上一個按鈕之一時,該方法可用於識別應從數據存儲中加載哪些數據。 據我所知,這是使用堆棧中以前的視圖控制器中的獲取結果控制器。 我可以簡單地要求Core Data返回表視圖中下一個或上一個索引路徑的結果。

在第三個(詳細信息)視圖控制器中,我可以訪問第二個(主)視圖控制器的訪存結果控制器,如下所示:

NSFetchedResultsController *fetch = [[self.navigationController.viewControllers objectAtIndex:1] fetchedResultsController];
NSIndexPath *indexPath = [fetch indexPathForObject:self.detailItem];
NSLog(@"Section: %d, Row: %d", indexPath.section, indexPath.row);

在繼續之前,我需要知道視圖控制器及其獲取的結果控制器將始終存在。 據我了解,它將一直保留到內存不足時才可以釋放它。 我的詳細信息視圖在顯示其數據時會占用大量內存,並且隨着應用程序用於隨時間收集更多數據而將消耗越來越多的內存。

我可以確定當用戶與局部視圖控制器交互時,這些項目(堆棧中的先前視圖控制器及其獲取的結果控制器)將保留在內存中嗎?

如果沒有,我是否有辦法確保保留他們?

否則,有沒有更簡單或更優雅的方式讓我達到目的?

您的第二個視圖控制器將永遠不會被釋放。 在內存不足的情況下也不行。 可能發生的情況是在內存不足的情況下調用了viewDidUnload (在iOS 6中已棄用,不再調用)。 因此,只要您不擺脫該方法中的NSFetchedResultsController ,您就可以了。

您可以知道此方法何時調用:

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

暫無
暫無

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

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