我声明了一个全局对象:
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
和 YViewController
之间来回点击时,XViewController
的内存不断增加。
在这种情况下如何使用 ARC 管理内存?
最佳答案
如果 XViewController 的源代码是开放的,我会调整它以配合导航。任何方法..
好吧,基本上你每次都会创建一个新的 ViewController 对象,这就是导致内存堆的原因。
您应该将“XViewController * xViewController”和“YViewController * yViewController”作为类变量,并且您的方法应该是这样的,例如。
查看该对象是否存在,如果存在,则不再分配。
-(void)methodTwo
{
if(xViewController == nil)
{
xViewController = [[XViewController alloc] initWithImage:myImage];
}
self.window.rootViewController=xViewController;
}
关于iphone - 使用 ARC 进行内存管理,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625494/