0

我有两个视图控制器,带有由滑动手势识别器触发的自定义 segue。

自定义segue是这样的:

-(void)perform{
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];

CATransition* transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;

[sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
}

它可以工作,但每次都会增加内存,我找到了这个解决方案:how to clear memory of previous ViewController

但是,如果在 viewController 名称中,我在滑动时将主 viewController 放入它本身,如果我放入 secondViewController 名称,它就会崩溃。

如何解决内存问题?非常感谢。

4

1 回答 1

1

如果我正确理解了您的问题,那么内存会随着每次执行的 segue 增加而增加是很自然的,因为就其本质而言,导航控制器会不断将您添加的每个新控制器推入其堆栈。这不是泄漏,因为您仍然可以从导航控制器堆栈中获取指向这些视图控制器的指针,并且当您丢失对部分内存的每个引用时就会发生泄漏。使用导航控制器时,内存中的这种增量并没有逃脱,这是它的预期用途(但是,您可以释放每个源视图控制器正在使用的任何资源,并且可以在将新视图控制器推入堆栈之前在需要时重新创建) .

也许问题是您不想使用导航控制器?如果你能提供更多关于你想要完成的事情的细节,我可能会更有帮助。

于 2013-05-23T12:26:35.753 回答