iPhone内存泄漏

时间:2010-12-11 19:30:46

标签: iphone ios ios4

我知道有些内存泄​​漏并没有什么大不了,或者是因为它们在sdk本身中没有受到开发人员的控制,但我看到的iPhone 4版本的iPhone 4版本是32KB。我无法在3GS上触发此功能。它是在响应用户交互时发生的(响应于打开照片库,并且当我在照片库中时发生泄漏),因此它可能会很快建立起来。

这是我在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

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

感谢您的帮助。

编辑:正如GojaN的问题所指出的那样(谢谢,GojaN),我完全忘记提到它出现在乐器中:

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

3 个答案:

答案 0 :(得分:1)

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

泄漏通常发生在模拟器和设备中,是否会发生?

这是在运行循环中运行的代码,但可能由您的代码启动。每次运行代码时,这个块都会泄露吗?

答案 1 :(得分:1)

您应该从Xcode“Build”菜单中查看“构建和分析”选项。从编译时的角度来看,它将向您显示代码可能泄漏的位置。

答案 2 :(得分:-1)

此后不久,我的手机开始表现得非常奇怪。我删除了我的应用程序,重新安装它,并且无法再次发生这种情况。由于它之前相当一致并且易于复制,因此我将不得不将其直接用于直接晃动。

感谢那些提出建议的人。