[英]Keeping a class running in the background when another has been started
如果我在這里有這段代碼,我會盡力解釋一下
ViewTwoController *home = [[ViewTwoController alloc] initWithNibName:@"contentscreen" bundle:nil];
[self presentModalViewController:home animated:YES];
[home release];
我將開始一個新的.m和.h類。 但是,我想嘗試做的是在調用此函數時,讓它在后台運行時調用.m和.h類,這樣我就不會丟失數據。
我能想到的最好的例子是Android。 如果您開始一個新的類,並且不在進行調用的類中添加finish()語句,則上一個類將在當前類后面(被推到最前面)運行,並維護它原來擁有的所有數據,因此,如果您按下返回按鈕,您將看到您剛才的信息。 這可能嗎? 如果人們無法理解我要做什么,我可以嘗試添加更多細節。
您需要更好地了解對象的生命周期。
一個對象通常通過兩部分過程來實現。
可以使用+new
類方法(將alloc
和init
結合在一起)將其合並為一個步驟。
讓我們介紹一個名為MyClass
的示例類以及該類的一個名為myObject
的對象。 按照慣例,類以大寫字母開頭,而對象以小寫字母開頭。 因此,事不宜遲,下面的代碼:
MyClass * myObject;
這樣就形成了一個對象指針,但沒有為其分配任何內存或指示該指針引用任何東西。
myObject = [[MyClass alloc] init];
這實際上創建了MyClass
的實例,將-init
消息傳遞給它,然后將init
消息的返回值分配給myObject
。 此時該對象的引用計數為1。
myObject
可能會超出范圍,但僅此一項不會釋放在alloc
步驟中分配的內存。
為了釋放該內存,需要將釋放消息傳遞給該對象。
[myObject release];
釋放的作用是減少引用計數,如果引用計數已經為1,則將為該對象傳遞-dealloc
指示該對象實際上已被釋放。
回到您的問題...本質上是[self presentModalViewController:home animated:YES];
最終在home
上調用-retain
,以便在您關閉模式視圖控制器之前不會銷毀它。 當您調用release或autorelease時,實際上並沒有取消分配對象,只是告訴對象:
“嘿,我不再需要您了,如果沒有其他人也不需要,那么可以釋放您之前抓取的所有內存。”
您的問題與“類在后台運行”無關,而與您如何管理數據有關。
當您提供模式視圖控制器時,其父級(從其提供視圖的視圖控制器)不會被破壞(除非您專門釋放它,否則稍后可能會使您的應用程序崩潰)。 因此,如果您想知道它是否仍在內存中; 它是。 至於仍在運行的任務,取決於這些任務是什么。 例如,您仍然可以向其發送消息(調用方法),它將很樂意從您或委托中接收這些消息,並在屏幕外執行所需的任何操作。
希望能有所幫助。
在這種情況下,您需要提供新的視圖控制器。 主線程將在顯示的新控制器中。 如果您希望某些內容在先前的視圖控制器中在后台運行,則可以創建一個后台線程。 可以使用[self perfomselectorInThebackground ...]或其他一些方法(例如GCD)來完成。 (主要是您不應該阻止主線程)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.