2013-04-16 48 views
1

首先我加了我的ViewController以NavigationController這樣,如何在添加到NavigationController時釋放ViewController對象?

SecondViewController *viewControllerObj = [[SecondViewController alloc] init]; 
[self.navigationController pushViewController:viewControllerObj animated:YES]; 
[viewControllerObj release];` 

但這創建崩潰,當我在導航欄上按後退按鈕後,被推到SecondViewController。所以我創建SecondViewController對象在.H文件屬性,並以這樣的dealloc釋放 viewControllerObj,

現在我將我的ViewController以NavigationController這樣,

在.h文件中

@property (nonatomic,retain) SecondViewController *viewControllerObj; 

在.m文件,

self.viewControllerObj = [[SecondViewController alloc] init]; 
[self.navigationController pushViewController:self.viewControllerObj animated:YES]; 

[_viewControllerObj release]; // in dealloc method 

當我分析我的項目這表明潛在的泄漏對viewControllerObj,所以我已經修改了我這樣的代碼,

SecondViewController *temp = [[SecondViewController alloc] init]; 
self.viewControllerObj = temp; 
[temp release]; 
[self.navigationController pushViewController:self.viewControllerObj animated:YES]; 

現在我清除潛在的泄漏

但我不知道這是否是正確與否,是每個viewController對象需要聲明爲Property並在dealloc中釋放?

回答

0

就正確性而言,您始終可以使用autorelease而不是 版本。自動釋放是延遲釋放。它安排對象 在稍後收到它的發佈。

Link

因此,不要使用第一個代碼釋放消息使用自動釋放。

SecondViewController *viewControllerObj = [[[SecondViewController alloc] init] autorelease]; 
[self.navigationController pushViewController:viewControllerObj animated:YES]; 

自動釋放:在當前自動釋放池塊的末尾遞減接收器的保留計數。

版本:遞減接收器的引用計數。 (需要)。您只能實現這種方法來定義自己的 引用計數方案。這種實現不應該調用繼承的方法;也就是說,他們不應該在超級版本中包含發佈消息 。

Advanced Memory Management Programming Guide

+0

即使我試圖與自動釋放不起作用 –

+0

確保你不應該在發佈對象中刪除發佈聲明,如果任何代碼或dealloc方法。 –

+0

檢查也@Bhargavi –

相關問題