我如何能够推动自己的观点而不必每次都实例化自己

Posted

技术标签:

【中文标题】我如何能够推动自己的观点而不必每次都实例化自己【英文标题】:How I could push to my own view without having to instance itself everytime I do it 【发布时间】:2015-03-17 21:46:45 【问题描述】:

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

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

【问题讨论】:

有什么问题?你做的很正常。 但是每次我实例化它时它不会分配更多的内存吗? 仅当您从不将视图控制器从导航堆栈中弹出时。 如果你需要持有一个引用,你可以使MyOwnView成为一个简单的UIViewController的子类,从那个父类推送到MyOwnView,它还包括一个持有引用的属性风景? 【参考方案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 实例需要做更多的工作,但它们不会在您不使用它们时占用内存。

【讨论】:

【参考方案2】:

您可以将 ViewController 的引用存储在执行推送的类的私有属性中。您应该只在viewDidLoad 中初始化一次,然后使用它。

【讨论】:

以上是关于我如何能够推动自己的观点而不必每次都实例化自己的主要内容,如果未能解决你的问题,请参考以下文章

安装你自己的 Python 包

如何模拟在函数外部实例化的常量?

c# 中类的实例化

具有用户单击选择的组件的动态选项卡

具有用户单击选择的组件的动态选项卡

带有用户单击所选组件的动态选项卡