我每次推送时都会实例化自己的视图类。
MyOwnView *newSameView = [[MyOwnView alloc]initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:MyOwnView
animated:YES];
答案 0 :(得分:1)
你问过“但是每次实例化它都会分配更多的内存吗?”答案是不。它在每次创建实例时都会分配不同的内存,但是当您将视图控制器从堆栈中弹出时,该内存将被释放。
如果要保留MyOwnViewController类的实例,则创建一个“延迟加载”视图控制器的属性,然后使用它。
如果这是您的财产:
@property (nonatomic, strong) MyOwnViewController * myVC;
getter看起来像这样:
-(MyOwnViewController *) myVC;
{
if (_myVC == nil)
_myVC = [[MyOwnViewController alloc]initWithNibName:nil bundle:NULL];
return _myVC;
}
然后你可以像这样编写推送视图控制器的代码:
[self.navigationController pushViewController: self.myVC animated:YES];
关于这一点的好处是你只创建了一个MyOwnViewController的单个实例。缺点是,只要创建它的视图控制器存在,它就永远不会被释放,除非你明确地将它设置为nil。如果在某些时候你不再需要它,它将占用额外的内存(再次,除非你手动将属性设置为nil)
另一种方法是在每次需要时创建MyOwnViewController的新副本,然后在弹出后立即释放它。您在创建/销毁MyOwnViewController实例方面做了更多工作,但是当您不使用它们时它们不会占用内存。
答案 1 :(得分:0)
您可以将ViewController的引用存储在执行推送的类的私有属性中。您应该只在viewDidLoad
中初始化一次,然后再使用它。