首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我触摸我的UIImageView时,会有这个奇怪的内存泄漏?

为什么当我触摸我的UIImageView时,会有这个奇怪的内存泄漏?
EN

Stack Overflow用户
提问于 2009-06-03 09:32:32
回答 1查看 645关注 0票数 1

真的很奇怪。我有一个空白的UIImageView子类,它实现了-touchesEnded:、-touchesMoved和-touchesBegan:方法。这些方法的实现是空的。他们只是什么都不做。但是,当我运行带有“泄漏”的仪器时,当我触摸UIImageView并将手指移到那个UIImageView之外时,我仍然触摸屏幕,我会收到来自仪器的内存泄漏警告。

在我的演示应用程序中,这样做时没有发生对象分配。方法是空的。我在“仪器”上读到的每一件事都与基金会和运行循环相关。我已经检查了我的类两次,并删除了任何对象分配。它只是一个只显示一个图像的skelleton,但是当触摸它或移动屏幕上的手指时,该图像不会改变。这没什么意义。

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

更新:i测试了一下,发现当用5根手指快速敲击时,屏幕上的任何地方都会发生内存泄漏。我从Instruments.app获得的所有信息都是关于运行和事件循环的。看起来,如果设备不能足够快地处理触点,然后在某个时候释放分配的对象就会陷入困境。如果你能看到同样的问题,请试一试,并在这里报告。

更新:,我已经测试了几个苹果示例应用程序。当我在屏幕上用3-5根手指进行黑客攻击时,就像普通用户那样(是的,他们会这样做!),那么仪器就会显示出有关事件和运行循环的内存泄漏。当然,在这个框架里,或者在工具上,都有一个很大的东西。用iPhone操作系统2.2.1进行了测试。

EN

回答 1

Stack Overflow用户

发布于 2009-06-03 10:48:36

就像在苹果论坛上阅读一样,这是SDK中一个尚未解决的问题。当加速度计委托不是零时就会发生这种情况。将分配触摸事件对象,但从未释放。加速计委托调用得越快,这些分配失败的发生就越快。许多苹果样本代码都显示了同样的问题。我把加速度计打开了。

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

解决方案:关闭加速计(委托设置为零),减少应用程序的浏览量。我不知道他们是否在iPhone OS3.0中解决了这个问题。

不幸的是,这将无助于:

代码语言:javascript
复制
- (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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/943841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档