2011-06-29 115 views
-1

我有一個類MarshViewController.h,我使用下面的代碼從一個viewcontroller移動到另一個。iphone編程+從一個視圖移動到另一個視圖泄漏內存

#import "ExpertGameController.h" 
@interface MarshViewViewController : UIViewController<UIAlertViewDelegate> { 
ExpertGameController *nextExpertGame; 
} 
@property(nonatomic,retain)ExpertGameController *nextExpertGame; 

在.m我已經合成它,我使用下面的方法。我已經發布了nextExpertGame,但它仍然泄漏內存

-(IBAction)expertGame 
{ 

    nextExpertGame=[[ExpertGameController alloc]initWithNibName:@"ExpertGameController" bundle:nil]; 
    [self.navigationController pushViewController:nextExpertGame animated:YES]; 
    [nextExpertGame release]; 

} 

任何幫助表示讚賞。

+0

上面的代碼沒有任何內容泄漏,所以它可能在ExpertGameController中。你怎麼都沒有正確地使用你的nextExpertGame屬性。如果沒有存儲控制器,或者使用'self.nextExpertGame = [[[... ... ...] autorelease];'並在'dealloc'中釋放nextExpertGame。 – Joe

回答

0

當您分配控制器時,您給它的保留計數爲1,當您將其推送到導航控制器時,您給它的保留計數爲2,然後當您釋放它時,您將保留計數降回到1。當您從導航控制器彈出視圖控制器時,保留計數將被降低到0,然後它將從內存中釋放。

+0

我可以做以下 - (void)dealloc {navigationController release]; [super dealloc]; } – xcodelearner

+0

您應該不需要,navigationController由應用程序委託所擁有,應該在應用程序運行的整個時間保留。 –

0

從一個視圖移動到另一個更簡單的方式顯示在下面的代碼:

#import "ExpertGameController.h" 
@interface MarshViewViewController : UIViewController<UIAlertViewDelegate> { 

     //Your declared variables 
} 


-(IBAction) expertGame { 

ExpertGameController *objExpertGameController = [[ExpertGameController alloc] initWithNibName:@"ExpertGameController" bundle:nil]; 

[self.navigationController pushViewController: objExpertGameController animated:YES]; 
[objExpertGameController release]; 

} 

希望這有助於!

相關問題