【问题标题】:UIView subclass dealloc not calledUIView 子类 dealloc 未调用
【发布时间】:2012-08-19 11:56:36
【问题描述】:

我正在使用 AQGridView 在我的应用程序中显示图像网格。用户单击相册,然后我打开一个带有所有图像的网格的新控制器。问题是当用户按下后退按钮返回专辑列表时,网格视图上的 dealloc 没有被调用。我在视图控制器的 dealloc 中记录了一个字符串,它正在被调用。 我已经检查了 Instruments 中的 heapshots,即使在弹出视图之后,与 AQGridView 相关的所有内容都不会被释放。我使用 Interface Builder 创建网格视图,它连接到我的 .h 文件中的网格视图。

@property (weak, nonatomic) IBOutlet AQGridView *gridView;

我没有持有任何其他指向网格视图的指针。我正在为该项目使用 ARC。我是否需要在网格视图控制器的 dealloc 中以某种方式解除分配 gridView 还是由 ARC 自动处理?如果是,是什么阻止了它被释放?

编辑: 我正在使用 NSOperationQueue 在后台加载图像,然后在加载图像后,将它们放入网格单元格中。

【问题讨论】:

  • 对于那种类型,我宁愿使用强而不是弱。
  • 检查工具中的分配,找到你的对象,看看是什么增加了它的保留计数,以检查你是否错过了什么
  • @ott-- 我也尝试过使用 strong。没有变化。
  • self.gridView = nil; 放入viewDidUnload 方法中。对于weakstrong:参见developer.apple.com/library/ios/#releasenotes/ObjectiveC/… 段落ARC Introduces New Lifetime Qualifiers
  • @ott-- 我现在在 gridView 中使用 strong 并在 viewDidUnload 中使用 self.gridView = nil;。网格视图仍未解除分配。顺便说一句,当我按下返回按钮时,viewDidUnload 没有被调用。

标签: objective-c ios memory automatic-ref-counting aqgridview


【解决方案1】:

在您的网格视图控制器的dealloc 方法中,将gridView 指针设置为nil。

-(void)dealloc
{
    self.gridView = nil; 
}

【讨论】:

  • 如果您使用 ARC,您不会显式调用 super 的 dealloc - 它是由编译器自动为您添加的。 OP 说他正在使用 ARC,但你是对的,在非 ARC 项目中(仅)你应该包括对 [super dealloc] 的调用。 (参考:developer.apple.com/library/ios/#releasenotes/ObjectiveC/…
  • @jonkroll 不会改变任何东西。仍然没有调用 dealloc。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多