【发布时间】:2012-04-03 12:21:22
【问题描述】:
在我的应用程序中,我有一个滚动视图和四个表格视图。每次拖动然后释放,我都会得到一个 48 字节的泄漏。这真的加起来了。如您所见,两组泄漏具有相同的来源。有没有人见过这样的泄漏?
编辑 1:
当我单击泄漏旁边的箭头时,我会得到有关泄漏的以下信息:
【问题讨论】:
标签: ios memory-leaks uiscrollview instruments
在我的应用程序中,我有一个滚动视图和四个表格视图。每次拖动然后释放,我都会得到一个 48 字节的泄漏。这真的加起来了。如您所见,两组泄漏具有相同的来源。有没有人见过这样的泄漏?
当我单击泄漏旁边的箭头时,我会得到有关泄漏的以下信息:
【问题讨论】:
标签: ios memory-leaks uiscrollview instruments
解决方法:我发现handlePan发生内存泄漏:如果设置了UIScrollView委托。我需要委托方法,所以我继承了 UIScrollView,并声明了我自己的 @protocol。然后我覆盖了 scrollView panGestureRecognizer 的目标选择器,而不将其发送给 super:
//yourScrollView.h
@protocol yourScrollViewDelegate
-(void)yourProtocol;
@end
//yourScrollView.m
-(void)handlePan:(id)sender{
[yourDelegate yourProtocol];
}
【讨论】:
解决方法:
我意识到这个泄露的字节不知何故存储在滚动视图中。 您必须不时释放滚动视图并再次分配它,保持其状态。 您检测何时应该重新加载滚动视图的方式取决于您的应用程序需求。每次释放滚动视图时,这些字节也会被释放。
【讨论】:
您看到的是 iOS 5.1 中的一个已知错误,并且正在 iOS 开发者论坛中进行讨论。您可以通过在论坛中搜索“strdup”来找到相关主题。请参阅标题为“Elements App Memory Leak”的主题。搜索来自 Apple 员工的帖子。
【讨论】:
不知何故,很可能是你的错。
在分配工具中,按“i”按钮并打开“记录引用计数”。然后 Instruments 可以向您显示发生在这些对象上的所有分配、保留、自动释放和释放事件。 (您应该会在每个泄露的项目旁边看到一个箭头——单击它以显示该对象的分配历史记录。)
我想你会发现你的一些代码保留了一些东西,或者间接导致它被保留。猜测可能是滚动视图或其手势识别器之一。
【讨论】: