【发布时间】: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方法中。对于weak和strong:参见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