【问题标题】:Undestanding NSZombie log了解 NSZombie 日志
【发布时间】:2011-12-02 21:22:07
【问题描述】:

我正在尝试跟踪 exc-bad-access。我已经在启用 NSZombie 的情况下运行了 Instruments,当应用程序崩溃时我会收到此错误日志。有一个 UIView 会自动释放四次,但在自动释放池耗尽之前,它的引用计数仅为 3,因此 int 以 -1 引用计数结束。

我自己没有发送任何自动发布的消息,那么我该如何解决这个问题?

# Category Event Type RefCt Timestamp Address Size Responsible Library Responsible Caller 0 UITextView Malloc 1 00:09.478.888 0x80c2920 448 UIKit -[UIRuntimeConnection initWithCoder:] 1 UITextView Retain 2 00:09.492.814 0x80c2920 0 UIKit -[UITextView resignFirstResponder] 2 UITextView Autorelease 00:09.492.822 0x80c2920 0 UIKit -[UITextView resignFirstResponder] 3 UITextView Retain 3 00:09.494.396 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 4 UITextView Retain 4 00:09.494.400 0x80c2920 0 Foundation -[NSKeyedUnarchiver _replaceObject:withObject:] 5 UITextView Release 3 00:09.494.403 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 6 UITextView Retain 4 00:09.494.407 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 7 UITextView Release 3 00:09.494.448 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 8 UITextView Autorelease 00:09.494.845 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 9 UITextView Retain 4 00:09.494.848 0x80c2920 0 UIKit -[UIRuntimeConnection initWithCoder:] 10 UITextView Retain 5 00:09.495.215 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 11 UITextView Retain 6 00:09.495.230 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 12 UITextView Release 5 00:09.495.241 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 13 UITextView Retain 6 00:09.495.255 0x80c2920 0 Foundation -[NSArray(NSArray) initWithCoder:] 14 UITextView Release 5 00:09.495.277 0x80c2920 0 UIKit -[UIView initWithCoder:] 15 UITextView Retain 6 00:09.495.325 0x80c2920 0 UIKit -[UIView(Internal) _addSubview:positioned:relativeTo:] 16 UITextView Release 5 00:09.499.036 0x80c2920 0 UIKit -[UINib instantiateWithOwner:options:] 17 UITextView Retain 6 00:09.499.306 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 18 UITextView Retain 7 00:09.499.325 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 19 UITextView Release 6 00:09.499.336 0x80c2920 0 Foundation -[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] 20 UITextView Retain 7 00:09.499.358 0x80c2920 0 Foundation -[NSArray(NSArray) initWithCoder:] 21 UITextView Release 6 00:09.499.385 0x80c2920 0 UIKit -[UINib instantiateWithOwner:options:] 22 UITextView Retain 7 00:09.499.511 0x80c2920 0 Proyecto3 -[EventoDetailViewControllerClass setNombreTextView:] 23 UITextView Release 6 00:09.499.681 0x80c2920 0 Foundation -[NSKeyedUnarchiver dealloc] 24 UITextView Release 5 00:09.499.747 0x80c2920 0 Foundation -[NSKeyedUnarchiver dealloc] 25 UITextView Release 4 00:09.499.762 0x80c2920 0 Foundation -[NSKeyedUnarchiver dealloc] 26 UITextView Release 3 00:09.499.817 0x80c2920 0 Foundation -[NSKeyedUnarchiver dealloc] 27 UITextView Release 2 00:09.499.880 0x80c2920 0 UIKit -[UIRuntimeConnection dealloc] 28 UITextView Retain 3 00:09.534.891 0x80c2920 0 QuartzCore -[CALayer layoutSublayers] 29 UITextView Release 2 00:09.534.895 0x80c2920 0 QuartzCore CALayerLayoutIfNeeded 30 UITextView Retain 3 00:09.607.480 0x80c2920 0 UIKit -[UIView(Hierarchy) subviews] 31 UITextView Retain 4 00:09.607.947 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setView:] 32 UITextView Retain 5 00:09.607.951 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setGestureView:] 33 UITextView Retain 6 00:09.608.655 0x80c2920 0 UIKit -[UITouch view] 34 UITextView Autorelease 00:09.608.658 0x80c2920 0 UIKit -[UITouchesEvent _clearViewForTouch:] 35 UITextView Release 5 00:09.608.661 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setView:] 36 UITextView Release 4 00:09.608.666 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setGestureView:] 37 UITextView Release 3 00:09.608.807 0x80c2920 0 Foundation -[NSAutoreleasePool release] 38 UITextView Retain 4 00:09.609.307 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setView:] 39 UITextView Retain 5 00:09.609.311 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setGestureView:] 40 UITextView Retain 6 00:09.725.677 0x80c2920 0 UIKit -[UITouch view] 41 UITextView Autorelease 00:09.725.680 0x80c2920 0 UIKit -[UITouchesEvent _clearViewForTouch:] 42 UITextView Release 5 00:09.725.684 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setView:] 43 UITextView Release 4 00:09.725.688 0x80c2920 0 UIKit -[UITouch(UITouchInternal) setGestureView:] 44 UITextView Release 3 00:09.725.839 0x80c2920 0 Foundation -[NSAutoreleasePool release] 45 UITextView Zombie -1 00:11.383.459 0x80c2920 0 UIKit -[UIView(Internal) _invalidateSubviewCache]

【问题讨论】:

    标签: cocoa-touch memory-management exc-bad-access instruments nszombie


    【解决方案1】:

    使用 Instruments 分析泄漏时,最好忽略显示为归因于 Apple 库的任何泄漏。要调查的泄漏是那些表明源自您的应用程序代码的泄漏。

    自动释放的对象在池耗尽时被释放。如果您还没有创建任何您自己的自动释放对象,那么唯一的自动释放对象必须是 Apple 自己的,例如[NSString string]

    我假设您已经运行了分析器并解决了所有突出显示的问题?如果没有,这是第一步。

    接下来,查看EXC_BAD_ACCESS所在的行。它*可能*提供有关违规对象的线索。有可能 - 或其他一些 - 对象被过早释放,或者您没有充分保留它们。

    当这种情况发生时,运行时会在某个时候释放它们。尝试访问它们会导致 dreadedEXC_BAD_ACCESS

    这是 Lou Franco 在EXC_BAD_ACCESS上的解释以及如何追踪它的链接:

    Understanding EXC_BAD_ACCESS

    【讨论】:

    • 虽然我终于自己搞定了,但我将您的答案标记为已解决,因为分析器是导致我搞定僵尸的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多