真的很奇怪。我有一个空白的UIImageView子类,它实现了-touchesEnded:、-touchesMoved和-touchesBegan:方法。这些方法的实现是空的。他们只是什么都不做。但是,当我运行带有“泄漏”的仪器时,当我触摸UIImageView并将手指移到那个UIImageView之外时,我仍然触摸屏幕,我会收到来自仪器的内存泄漏警告。
在我的演示应用程序中,这样做时没有发生对象分配。方法是空的。我在“仪器”上读到的每一件事都与基金会和运行循环相关。我已经检查了我的类两次,并删除了任何对象分配。它只是一个只显示一个图像的skelleton,但是当触摸它或移动屏幕上的手指时,该图像不会改变。这没什么意义。
还有其他人遇到过这样的问题吗?
更新:i测试了一下,发现当用5根手指快速敲击时,屏幕上的任何地方都会发生内存泄漏。我从Instruments.app获得的所有信息都是关于运行和事件循环的。看起来,如果设备不能足够快地处理触点,然后在某个时候释放分配的对象就会陷入困境。如果你能看到同样的问题,请试一试,并在这里报告。
更新:,我已经测试了几个苹果示例应用程序。当我在屏幕上用3-5根手指进行黑客攻击时,就像普通用户那样(是的,他们会这样做!),那么仪器就会显示出有关事件和运行循环的内存泄漏。当然,在这个框架里,或者在工具上,都有一个很大的东西。用iPhone操作系统2.2.1进行了测试。
发布于 2009-06-03 10:48:36
就像在苹果论坛上阅读一样,这是SDK中一个尚未解决的问题。当加速度计委托不是零时就会发生这种情况。将分配触摸事件对象,但从未释放。加速计委托调用得越快,这些分配失败的发生就越快。许多苹果样本代码都显示了同样的问题。我把加速度计打开了。
但我也遇到过,这种泄漏发生在从一个视图跟踪到另一个视图的时候。如果我不停地触摸同一个视图,并在没有离开的情况下将手指移到视图上,我就不会遇到这个问题。
解决方案:关闭加速计(委托设置为零),减少应用程序的浏览量。我不知道他们是否在iPhone OS3.0中解决了这个问题。
不幸的是,这将无助于:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[UIAccelerometer sharedAccelerometer] setDelegate:nil]; // because of framework bug
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug
}更多信息请访问:http://discussions.apple.com/thread.jspa?messageID=9396584t
https://stackoverflow.com/questions/943841
复制相似问题