2011-06-29 175 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]; 

} 

希望这有助于!

相关问题