我宣布了一个全局对象:
YViewController * yViewController
在App Launch中我正在致电:
[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
和XViewController
之间来回切换时,YViewController
的记忆不断增加。
如何使用ARC管理此类情况下的内存?
答案 0 :(得分:1)
如果XViewController的源是打开的,我会调整它以进行导航。任何方式..
好的,基本上你每次都在创建一个ViewController的新对象,这就是导致内存堆积的原因。
你应该拥有' XViewController * xViewController'和' YViewController * yViewController'作为类变量和你的方法应该是这样的事情,例如。
查看对象是否存在,如果存在,则不要再次分配。
-(void)methodTwo
{
if(xViewController == nil)
{
xViewController = [[XViewController alloc] initWithImage:myImage];
}
self.window.rootViewController=xViewController;
}