每次发布UIScrollView时都会发生内存泄漏

时间:2012-03-18 22:45:11

标签: ios memory-leaks uiscrollview instruments

在我的应用程序中,我有一个滚动视图和四个表视图。每次拖动然后释放,我都会得到48字节的泄漏。这确实加起来了。如您所见,两组泄漏都具有相同的来源。有没有人见过像这样的泄漏?




编辑1:

当我点击泄漏旁边的箭头时,我会得到泄漏信息:

4 个答案:

答案 0 :(得分:28)

您所看到的是iOS 5.1中的一个已知错误,正在iOS开发者论坛中进行讨论。您可以在论坛中搜索“strdup”找到相关的主题。请参阅标题为“Elements App Memory Leak”的主题。搜索Apple员工的帖子。

答案 1 :(得分:0)

很有可能,不管怎样,这是你的错。

在Allocations乐器中,按“i”按钮并打开“Record Reference Counts”。然后,Instruments可以向您显示发生在这些对象上的所有分配,保留,自动释放和释放事件。 (您应该在每个泄露的项目旁边看到一个箭头 - 单击它以显示该对象的分配历史记录。)

我认为您会发现某些代码会保留某些内容,或间接导致其保留。可能是滚动视图或其中一个手势识别器,作为猜测。

答案 2 :(得分:0)

解决方法:

我意识到这个泄露的字节不知何故存储在scrollview中。 您必须释放您的滚动视图并不时再次分配它,保持其状态。 您检测何时应重新加载滚动视图的方式取决于您的应用程序需求。每次释放滚动视图时,这些字节也会被释放。

答案 3 :(得分:0)

解决方法:我发现handlePan中发生了内存泄漏:如果设置了UIScrollView委托。我需要委托方法,所以我将UIScrollView子类化,并声明我自己的@protocol。然后我覆盖了scrollView panGestureRecognizer的目标选择器,而没有将其发送到super:

//yourScrollView.h
@protocol yourScrollViewDelegate
-(void)yourProtocol;
@end

//yourScrollView.m
-(void)handlePan:(id)sender{
   [yourDelegate yourProtocol];
}