Obj-C:在strdup帧中的Malloc 48字节的内存泄漏

时间:2012-03-26 21:46:07

标签: objective-c memory-leaks strdup

在我的应用中,我收到多个内存泄漏。对象是Malloc 48字节,它始终来自负责的调用者strdup。该对象的历史记录仅显示它是Malloced,没有其他保留或释放。堆栈跟踪不显示我的任何代码。我可以选择的唯一相关内容是:

  10 UIKit _UIGestureRecognizerSendActions
   9 UIKit -[UIScrollView handlePan:]
   8 UIKit -[UIScrollView _endPanWithEvent:]
   7 UIKit -[UIScrollView(Static) _startTimer:]
   6 CoreFoundation CFNotificationCenterAddObserver
   5 CoreFoundation _CFXNotificationRegisterObserver
   4 libnotify.dylib notify_register_dispatch
   3 libnotify.dylib notify_register_mach_port
   2 libnotify.dylib token_table_add
   1 libsystem_c.dylib strdup
   0 libsystem_c.dylib malloc

在地图视图上滚动时似乎发生了,但我不确定如何继续,因为堆栈中没有引用我的代码。我该如何进行诊断?

如果需要进一步的信息,请告诉我。

此致 尼克

4 个答案:

答案 0 :(得分:11)

如果它只是“48”字节,所有证据都指向系统框架中的帧(即分配永远不会暴露给你的代码),并且没有成千上万的人,那么我(a)就不会我很担心太多,但我会(b)立即通过http://bugreport.apple.com/提交错误

附上您的应用程序的二进制文件以及如何重现该问题的说明。

答案 1 :(得分:1)

我想我已经确认它是在5.1中引入的。我可以通过在我的应用程序处于活动状态时使用主页按钮复制内存泄漏,并使用iPhone模拟器5.1将UIScrollView作为活动视图。在iPhone模拟器5.0上运行的相同测试不会重现错误。

希望这有帮助

答案 2 :(得分:0)

只是为了确认这确实是一个反复出现的问题而不只是你遇到了问题。我已经在Table滚动和UIScrollView中看到过这种情况。我在模拟器中测试了它,并在iPad上分析了发布版本。似乎是5.1中的常见问题,但我还没有听说过修复。我确实同意,每个卷轴上的48字节可能会成为一个问题。

答案 3 :(得分:0)

它可能是由performselectorinbackground引起的,在@autoreleasepool {}块中调用它