每次我做的时候,如何在不必自我实现的情况下推动自己的观点

时间:2015-03-17 21:46:45

标签: ios objective-c view

我每次推送时都会实例化自己的视图类。

MyOwnView *newSameView = [[MyOwnView alloc]initWithNibName:nil
 bundle:NULL];
    [self.navigationController pushViewController:MyOwnView
    animated:YES];

2 个答案:

答案 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中初始化一次,然后再使用它。