了解NSZombie日志

时间:2011-10-07 09:49:02

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

我正在尝试跟踪错误访问。我已启用启用了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]

1 个答案:

答案 0 :(得分:1)

使用Instruments描述泄漏时,最好忽略显示为归属于Apple库的任何泄漏。要调查的泄漏是那些来自您的应用程序代码的节目。

当池耗尽时,将释放自动释放的对象。如果您尚未创建任何自动释放的对象,则唯一的自动释放对象必须是Apple自己的对象,例如[NSString string]

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

接下来,查看EXC_BAD_ACCESS出现的行。 * *可以*提供有关违规对象的线索。有可能是 - 或其他一些 - 物体过早释放,或者你没有充分保留它们。

当发生这种情况时,运行时会在某些时候解除分配它们。试图访问它们会导致可怕的EXC_BAD_ACCESS

以下是Lou Franco对EXC_BAD_ACCESS的解释以及如何追踪它的链接:

Understanding EXC_BAD_ACCESS