【问题标题】:Memory management when using IBOutlet/NIBs使用 IBOutlet/NIB 时的内存管理
【发布时间】:2011-05-18 21:36:33
【问题描述】:

我的应用程序即将完成,我一直在使用 Instruments 对其进行分析。我正在检查各种对象的保留计数。

我一直小心地释放我调用 alloc 的任何对象,这些对象似乎没有泄漏 - 这很酷。

但是,我有一个视图控制器,其中有一个 UIPickerView。我通过将它拖到 IB 中的 NIB 上来设置它,使用 IBOutlet 定义属性,合成它,然后将其全部连接起来。

每次我启动视图时,UIPickerView 的数量似乎都会增加一。我假设我不需要自己释放这种东西,因为我已经将它分配给了一个属性(使用非原子,保留)。

这发生在我所有的 UI 东西上——按钮等,而不仅仅是选择器视图。我只是以它为例。

谁能帮帮我?

谢谢!

【问题讨论】:

  • 需要释放IB连接对象的两个地方在-viewDidUnloaddealloc

标签: iphone ios memory-management interface-builder nib


【解决方案1】:

加载视图时,所有从 NIB 创建的项目都会为您保留,并且您的 IBOutlet 指针已初始化,指向那些保留的子视图对象。您需要在 viewDidUnload 中释放它们。你这样做了吗?

在 viewDidUnload 中,您应该释放从 NIB 创建的所有对象并将这些指针设置为 nil。您还应该在 dealloc 中释放这些相同的对象。 Example here.

【讨论】:

  • 哦,这对我来说是个新闻——谢谢!我一直在读的书都没有提到这一点。我认为属性自己负责内存管理。一个问题 - 我是否只需要为与 IBOutlet 一起使用的属性或所有属性执行此操作?
  • 您创建的所有对象都应在完成后释放。在通常在 viewDidUnload 和 dealloc 中的视图控制器中。
猜你喜欢
  • 2012-02-08
  • 2011-07-15
  • 2010-12-02
  • 2010-09-30
  • 2015-03-19
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多