2012-12-05 137 views
1

我無法理解這些對象是如何在ARC中發佈的,但對於我而言仍然存在一些困惑。ARC中的內存管理

假設我創建在一個方法

-(void) displayView 
    { 
     RegViewController *sampleView = [[RegViewController alloc] init]; 
     [sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
     [sampleView setModalPresentationStyle:UIModalPresentationFormSheet]; 
     [self presentModalViewController:sampleView animated:YES]; 
    } 

是否釋放時該方法塊完成或我們應該明確通過給予零引用釋放創建的對象的圖控制器或任何其他使用的alloc?

+0

(不再需要),在一開始有在ARC和非ARC應用程序之間沒有區別。 – tkanzakic

+0

是範圍是ARC唯一關心的問題。 –

回答

0

視圖控制器在塊結束時自動釋放。然而,而不是意味着它被釋放 - 它仍然被presentModalViewController:animated:方法保留,並且在被解僱時將被釋放(和釋放)。

+0

看起來很好,但是在解散時它應該消失。 –

+0

如果我們關閉視圖控制器,那麼它會被釋放? – Mukunda

+0

記住所有對某個對象的強引用必須取消以便ARC釋放它。在這種情況下,解僱方法應該取消某些變量以釋放它。 –

0

ARC代表自動引用計數。 它接管用戶維護對象引用計數的責任。 這就是爲什麼你不能再打[obj retain][obj release]。 只要參考計數器達到0,它就會爲您發佈。 請記住,它不是垃圾收集器。有些情況下,如果你不小心,這種機制可能導致內存泄漏。但總的來說,它運作得很好。

1

在這種情況下sampleView將在模態視圖解除時釋放。在這種情況下不需要做任何事情。

0
Does it release the object created when the method block completes or we should explicitly release by giving nil to reference? 

答案是NO

在上述情況下sampleView保留計數未達到0,因爲您將此作爲參數傳遞給self類。一旦所有的強引用都被清除,它的保留計數就會降到0,只有在它被釋放後。

使用ARC時,編譯器將包括必需品,當一個對象失控的範圍內調用了`release`方法你可以簡單地想象你的代碼作爲RegViewController *sampleView = [[[RegViewController alloc] init] autorelease];