何时释放自动释放

时间:2011-08-29 16:13:13

标签: ios cocoa-touch uiview autorelease

我希望开发一个应用程序,根据用户的交互创建“n”个视图。如果这些视图中的每一个都是使用autorelease动态创建的,那么视图何时才会被释放?

假设有10个视图,都是使用自动释放动态创建的视图:

  1. 创建视图1并将其添加到导航堆栈,用户显示视图1
  2. 用户移动到另一个视图“View 2”,视图1被推离堆栈并添加了视图2。 View View 1会在这里发布吗?我不希望它被释放,所以我应该保留它吗?
  3. 问题是,我可能不知道我创建了多少个视图,因此手动取消分配它们可能有问题,或者有办法吗?
  4. 我在这里有点迷茫。

    由于

2 个答案:

答案 0 :(得分:2)

  1. 您不会向导航堆栈添加视图,而是添加视图控制器。
  2. 按下视图控制器2时,第一个不会被释放,不会。导航控制器将始终保持其所有视图控制器保持不变,直到它们从堆栈弹出。它只会在非显示的视图控制器上调用-unloadView来释放一些内存,但是如果你在视图控制器的loadView方法中创建视图,那么一切都将自动重新创建。
  3. 您不会手动释放任何内容,只能释放它。由于导航控制器将保留您在其堆栈上添加的任何视图控制器,因此您可以自行释放它。
  4. 从您提出问题的方式来看,我注意到您缺少一些关于iOS SDK,MVC和OOP的基本知识。我诚实地建议你先尝试创建一个比that chat app of yours更简单的应用来学习一些基础知识。

答案 1 :(得分:1)

如果您发布代码的关键部分,这将有所帮助,以便我们可以看到您在做什么。简而言之,如果视图控制器在导航堆栈中,它将由导航控制器保留。如果它被弹出但你想保留它,你需要保留它来自另一个控制器,可能是它提供它。