2009-06-03 19 views
1

这真的很奇怪。我有一个空白的UIImageView子类,它实现了-touchesEnded :, -touchesMoved和-touchesBegan:方法。这些方法的实现是空的。他们什么都不做。但是,当我使用“泄漏”运行仪器时,触摸UIImageView并在仍然触摸屏幕的同时将手指移动到该UIImageView的外部时,我收到仪器的内存泄漏警告。当我触摸我的UIImageView时,为什么会出现这种奇怪的内存泄漏?

在我的演示应用程序中没有发生对象分配时发生。方法是空的。我在乐器中读到的所有内容都与Foundation和Run Loop相关。我检查了我的班级两次,并删除了任何对象分配。这只是一个只显示图像的骨架,但是当触摸它或在屏幕上移动手指时,该图像不会改变。这是没有意义的。

还有其他人遇到这样的问题吗?

更新:我多花点心思,发现内存泄漏发生在屏幕上的任何一点,当用5根手指快速敲击时。我从Instruments.app获得的所有内容都是关于一些运行和事件循环。这似乎是如果设备不能足够快地处理触摸,然后在释放分配的对象的某个时刻卡住。如果您看到相同的问题,请尝试一下并在此处报告。

更新:我测试了一些苹果示例应用程序以及。当我在屏幕上用3-5根手指进行破解时,就像普通用户一样(是的,他们会这么做!),然后仪器显示关于事件和运行循环的内存泄漏。在框架或仪器中肯定有一个很大的问题。使用iPhone OS 2.2.1进行测试。

回答

2

由于在苹果论坛上阅读,这是SDK中未解决的问题。当加速度计委托不是零时发生。触摸事件对象已分配但从未释放。加速度计委托调用的速度越快,分配失败发生得越快。许多苹果示例代码显示相同的问题。我开启了加速度计。

但我也遇到过这种泄漏发生在触摸从一个视图跟踪到另一个视图时发生。如果我继续触摸同一个视图,并且在不离开视图的情况下移动我的手指,我就不会遇到这个问题。

解决方案:关闭加速度计(将代表设置为零),减少应用中的视图数量。我不知道他们是否在iPhone OS 3.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

+0

加速计仍漏水像地狱在3.0。谢谢你。 – SpaceDog 2009-10-28 05:59:01