Непонятный журнал NSZombie - PullRequest
0 голосов
/ 07 октября 2011

Я пытаюсь отследить экс-плохой доступ. Я запустил инструменты с включенным NSZombie, я получаю этот журнал ошибок при сбое приложения. Существует 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 Ответ

1 голос
/ 09 ноября 2011

При использовании инструментов для профилирования утечек лучше всего игнорировать любые утечки, которые отображаются как относящиеся к библиотекам Apple. Утечки для расследования - это те, которые появляются в коде вашего приложения.

Объекты, которые автоматически освобождаются, освобождаются при сливе пула. Если вы не создали ни одного из ваших собственных объектов, которые автоматически высвобождаются, то единственными объектами, которые автоматически высвобождаются, должны быть собственные Apple, например, [NSString string].

Я полагаю, вы уже запустили Анализатор и решили все выделенные проблемы? Если нет, то это первый шаг.

Далее посмотрите на строку, где происходит EXC_BAD_ACCESS. Это * может * дать подсказку об обидном объекте. Скорее всего, что - или какой-то другой - объект освобождается преждевременно, или же вы недостаточно сохранили их.

Когда это произойдет, в какой-то момент среда выполнения освободит их. Попытка получить к ним доступ вызывает ужас EXC_BAD_ACCESS.

Вот ссылка на объяснение Лу Франко по EXC_BAD_ACCESS и как его отследить:

Понимание EXC_BAD_ACCESS

...