2012-03-14 83 views
2

我想釋放的UIViewController對象的iOS 5 之前的iOS版本(> 5.0),我們總是寫代碼或以下內存無泄漏維護代碼,釋放iOS 5中的UIviewController對象?

if(myViewControllerObject != nil){ 
    [myViewControllerObject.view removeFromSuperView]; 
    [myViewControllerObject release]; 
    myViewControllerObject = nil; 
} 
myViewControllerObject = [[MyViewControllerObject alloc] initWithNibName:@"MyViewControllerObject" bundle:nil]; 
    [self.view addSubview: myViewControllerObject.view]; 

但在iOS 5中,我們不能使用發佈釋放UIviewController對象的方法,那麼我們必須在iOS 5中做些什麼來維護額外的對象分配和泄漏? 什麼是最好的方法來實現這個層次?

謝謝。

回答

0

除非您爲項目激活自動引用計數,否則您的代碼不會更改爲iOS 5。那麼您將無法使用release,dealloc等,因爲系統處理內存管理。

要了解更多關於ARC,看到了這個問題:How does the new automatic reference counting mechanism work?

+0

如果我們不釋放對象不是一個崩潰的機會? – 2013-02-17 07:17:57

+0

不,不釋放對象是一個不必要的內存消耗和內存泄漏的機會。但正如我所說,使用ARC將防止這一點 - 發行版自動完成(或多或少),這樣你就不必寫'自己release'語句。 – 2013-02-20 12:10:19

0

如果您使用ARC(自動保留/引用計數),則根本不需要使用release。編譯器現在計算所有保留並自動釋放它們。它並不是真正的垃圾收集,但編譯器只是在沒有使用對象的地方進行工作,並自動添加該版本。

因此,在回答你的問題時,只需保留它,編譯器就會將其排除。

+0

感謝托馬斯給我提供簡短的解釋.... NW我明白UR答案也是可以接受的:) – Tirth 2012-03-14 12:03:55

+1

但強制弧釋放它,使用'myViewControllerObject = nil;'。 – Simon 2012-03-14 18:32:03

+0

如果我們沒有發佈對象不是一個崩潰的機會? – 2013-02-17 08:46:26

0

你不應該叫

[myViewControllerObject.view removeFromSuperView]; 

UIViewController類(基類myViewControllerObject的)在低內存可以自動設置這個屬性爲nil條件以及視圖控制器本身最終被釋放時。

所以這應該是罰款

[myViewControllerObject release]; 
myViewControllerObject = nil; 

更新:對於ARC參考下面的回答