【问题标题】:Memory management for reusing UIAlertView重用 UIAlertView 的内存管理
【发布时间】:2012-07-16 15:38:24
【问题描述】:

假设我有多个视图控制器类使用相同的 UIAlertView *alertView。 *alertView 的委托设置为集中委托。

我这样做是因为想使用 .tag 来基于它做不同的事情。

问题是每次我调用警报视图或关闭它时,我必须做些什么来防止内存泄漏?

我不应该每次都释放吗?或者这是一个非常糟糕的主意?

谢谢。

【问题讨论】:

  • 提供的任何答案都回答了您的问题吗?

标签: objective-c ios memory-management uialertview


【解决方案1】:

UIAlertView 可以从您应用中的任何位置“显示”。我有一个应用程序,它的主 UIViewController 有一个计时器,每隔一段时间就会显示一个 UIAlertView。当该计时器关闭时,即使显示的主视图来自完全不同的 UIViewController(因此视图),警报也会出现在前面。

如果您真的想“主动”从您的任何 UIViewController 中调出 UIAlertView(可以说是基于用户操作),那么我会做两件事之一。

1) 使用在那里实现的 UIAlertView 设置我的应用程序委托对象,并使用用于调用(显示)警报视图的访问器方法,从而也从那里释放它,或者

2) 生成一个类似单例的对象,并在那里实现 AlertView!!!

在任何一种情况下,您都可以在为这些位置中的任何一个编写的 dealloc 例程中简单地解除 UIAlertView 一次,并在对象初始化时仅分配一次。

【讨论】:

  • 我这样做了,此外,使用 UIALertView 的“标签”让我知道哪个警报视图正在运行。
【解决方案2】:

就像对待任何其他对象一样对待它。如果您想保留它,请将其分配给保留属性,例如:self.myAlert。您仍然需要像通常在创建它时那样释放它。保留的财产将负责为您保留它。

始终保持您的保留(分配、副本等)和发布平衡。

【讨论】:

  • 如果在我再次尝试重用之前,保留计数变为零怎么办?这意味着我需要进行新的分配,但我如何检测它是否已被解除分配?
  • 如果你已经将它分配给一个保留的属性,它不会变成0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多