2012-07-24 42 views
0

我宣布一个全局对象:内存管理,行为怪异

YViewController * yViewController 

当应用启动时,我呼吁:

[self methodOne]; 

的方法做到这一点:

-(void)methodOne 
{ 
yViewController = [[YViewController alloc] initWithNibName:@"YViewController" bundle:nil]; 
self.window.rootViewController=yViewController; 
} 

当我在YViewController中点击一个按钮时,我打电话:

[self methodTwo]; 

的方法做到这一点:

-(void)methodTwo 
{ 
    XViewController * xViewController = [[XViewController alloc] initWithImage:myImage]; 
    self.window.rootViewController=xViewController; 
} 

当后退按钮上XViewController我打电话[self methodOne];其导航回YViewController挖掘。

问题是,当我使用ARC时,我无法刷新/释放xViewController对象。此外,当检查仪器时, XViewController的存储器继续增加,因为我在XViewControllerYViewController之间来回切换。

如何在ARC这种情况下管理内存?

+0

为什么不使用导航控制器进行导航? – 2012-07-24 06:52:02

+0

嗨Vaibhav,XViewController实际上来自第三方库及其已经是一个导航控制器。那是原因。 – Ganesh 2012-07-24 06:58:18

+0

你应该尝试导航控制器,它的几行代码,使其工作。加上因为你提到它的第三方工具,那么可能是XViewController的内存管理很差 – WaaleedKhan 2012-07-24 07:09:38

回答

1

如果XViewController的来源是打开的,我会调整它与导航。任何方式......

好吧,基本上你每次都创建一个ViewController的新对象,这就是导致内存堆积的原因。

你应该有'XViewController * xViewController'和'YViewController * yViewController'作为类变量,你的方法应该是这样的一些例如。

看看对象是否存在,如果存在,不要再分配它。

-(void)methodTwo 
{ 
if(xViewController == nil) 
{ 
    xViewController = [[XViewController alloc] initWithImage:myImage]; 
} 
    self.window.rootViewController=xViewController; 

}