2010-12-11 162 views
1

我知道有些内存泄​​漏没有什么大不了,或者不在开发人员的控制范围之内,因为它们在sdk本身,但我看到的是iOS 4上的iOS版本为32KB SDK 4.2。我还没有能够在3GS上触发此功能。它发生在响应用户交互(响应打开照片库,并且泄漏似乎在我进入照片库时发生),因此它可以快速建立起来。iPhone内存泄漏

这里的堆栈跟踪我看到的iPhone 4:

0 libSystem.B.dylib calloc 
    1 0x317e8363 
    2 0x317e9c41 
    3 0x318273ff 
    4 0x31827ea5 
    5 0x302ea49d 
    6 0x302ebe07 
    7 0x302eb7c3 
    8 0x302ebcab 
    9 0x303304cd 
    10 UIKit -[UINavigationController _startTransition:fromViewController:toViewController:] 
    11 UIKit -[UINavigationController _startDeferredTransitionIfNeeded] 
    12 UIKit -[UINavigationController viewWillLayoutSubviews] 
    13 UIKit -[UILayoutContainerView layoutSubviews] 
    14 UIKit -[UIView(CALayerDelegate) layoutSublayersOfLayer:] 
    15 CoreFoundation -[NSObject(NSObject) performSelector:withObject:] 
    16 QuartzCore -[CALayer layoutSublayers] 
    17 QuartzCore CALayerLayoutIfNeeded 
    18 QuartzCore CA::Context::commit_transaction(CA::Transaction*) 
    19 QuartzCore CA::Transaction::commit() 
    20 QuartzCore CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 
    21 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
    22 CoreFoundation __CFRunLoopDoObservers 
    23 CoreFoundation __CFRunLoopRun 
    24 CoreFoundation CFRunLoopRunSpecific 
    25 CoreFoundation CFRunLoopRunInMode 
    26 GraphicsServices GSEventRunModal 
    27 GraphicsServices GSEventRun 
    28 UIKit -[UIApplication _run] 
    29 UIKit UIApplicationMain 
    30 MyApp main /Users/david/src/MyApp/main.m:14 
    31 MyApp start 

我没有看到我的代码的任何地方,并在这里,我不知道该怎么检查与地址的符号是什么。有任何想法吗?这可能与我添加的子层有关吗? (这是我在这里看到的唯一可以控制的东西。)

感谢您的帮助。

编辑:古栈的问题,指出(谢谢你,古栈),我完全忘了提,这是表示文书起来:

Leaked Object # Address Size Responsible Library Responsible Frame 
GeneralBlock-36864 0x4ff3000 36864 UIKit -[UINavigationController _startTransition:fromViewController:toViewController:] 
+1

你怎么知道有内存泄漏?是在控制台中出现的消息?你可以在你的问题中粘贴控制台输出吗? – 2010-12-11 19:44:32

回答

-1

不久之后,我的手机开始表现得很奇怪。我删除了我的应用程序,重新安装了它,并且一直无法让它再次发生。由于之前的版本相当一致并且易于复制,因此我必须将其记录为直接的好奇。

谢谢那些提供建议的人。

1

你知道这是一个泄漏?这很可能是一个缓存。 (半相关:我在我的PDF查看应用程序中看到的内存不断增长,看起来像是一个泄漏,但它显然是缓存每一页,当我关闭PDF文档时,它们全部消失。)

泄漏通常会发生在模拟器以及设备中,它是否发生在那里?

这是代码在运行循环中运行,但可能由您的代码启动。每当你运行你的代码时,这个块是否会泄漏?

+0

好问题。根据泄漏仪器,这是一个泄漏。但是,我无法在模拟器中重现它,并且每次运行我的代码时都不会泄漏。看起来它可能会在响应内存警告时发生,所以我可能会更仔细一点。 – devguydavid 2010-12-16 04:39:55

+0

然后,您可以尝试模拟器中的硬件>模拟内存警告。 – 2010-12-21 23:52:48

1

您应该从Xcode“Build”菜单中查看“Build and Analyze”选项。它会从编译时间的角度向您显示代码可能泄漏的位置。

+0

谢谢,是的,我一直在经常运行静态分析仪。虽然它在几个地方有所帮助,但它在这里没有发现任何东西。 – devguydavid 2010-12-16 04:38:32