presentModalViewController приводит к загадочным зомби - PullRequest
1 голос
/ 26 марта 2012

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

Инструменты сообщают, что объект зомби - это представление, которое я представляю какмодальное представление (MyPopUpViewController).Вот код, который представляет контроллер модального представления.

MyPopUpViewController *popUpViewController =
                    [[MyPopUpViewController alloc] init];

UINavigationController *navigationController =
                    [[UINavigationController alloc] initWithRootViewController:popUpViewController];

[popUpViewController release];

[self.tabBarController presentModalViewController:navigationController animated:YES]; // zombie occurs here

                [navigationController release];

В MyPopUpViewConroller, когда пользователь нажимает кнопку «Готово» на панели навигации, контроллер модального представления отклоняется - стандартные вещи и работают 99 из 100(или больше)*

Теперь я полагаю, что если я добавлю MyPopUpViewController к контроллеру навигации, он будет сохранен контроллером навигации, поэтому я могу выпустить его.Аналогично, tabBarController сохранит навигационный контроллер, поэтому я могу выпустить его тоже, как показано в коде.

Из диагностики инструментов это мои единственные сохранения / выпуски MyPopUpViewController (см. Ссылки на«myapp» в столбце «Ответственный»), и именно внутренние устройства iOS позже [очевидно?] вызывают зомби.

Буду признателен за предложения относительно того, почему я вижу этого зомби.Спасибо.

#   Address Category    Event Type  RefCt   Timestamp   Size    Responsible Library Responsible Caller
0   0x14532980  MyPopUpViewController   Malloc  1   00:10.669.925   176 myapp   -[MyPopUpViewController tableView:didSelectRowAtIndexPath:]
1   0x14532980  MyPopUpViewController   Retain  2   00:10.670.707   0   UIKit   -[UIViewController _addChildViewController:performHierarchyCheck:]
2   0x14532980  MyPopUpViewController   Retain  3   00:10.670.721   0   UIKit   -[UINavigationController topViewController]
3   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.670.723   0   UIKit   -[UINavigationController topViewController]
4   0x14532980  MyPopUpViewController   Release 2   00:10.671.467   0   myapp   -[MyPopUpViewController tableView:didSelectRowAtIndexPath:]
5   0x14532980  MyPopUpViewController   Retain  3   00:10.671.494   0   UIKit   -[UINavigationController topViewController]
6   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.671.496   0   UIKit   -[UINavigationController topViewController]
7   0x14532980  MyPopUpViewController   Retain  4   00:10.671.497   0   UIKit   -[UINavigationController topViewController]
8   0x14532980  MyPopUpViewController   Autorelease <null>  00:10.671.497   0   UIKit   -[UINavigationController topViewController]
9   0x14532980  MyPopUpViewController   Retain  5   00:10.672.129   0   UIKit   -[UINavigationController topViewController]
10  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.130   0   UIKit   -[UINavigationController topViewController]
11  0x14532980  MyPopUpViewController   Retain  6   00:10.672.131   0   UIKit   -[UINavigationController topViewController]
12  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.132   0   UIKit   -[UINavigationController topViewController]
13  0x14532980  MyPopUpViewController   Retain  7   00:10.672.138   0   UIKit   -[UINavigationController topViewController]
14  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.139   0   UIKit   -[UINavigationController topViewController]
15  0x14532980  MyPopUpViewController   Retain  8   00:10.672.140   0   UIKit   -[UINavigationController topViewController]
16  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.141   0   UIKit   -[UINavigationController topViewController]
17  0x14532980  MyPopUpViewController   Retain  9   00:10.672.489   0   UIKit   -[UINavigationController topViewController]
18  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.490   0   UIKit   -[UINavigationController topViewController]
19  0x14532980  MyPopUpViewController   Retain  10  00:10.672.491   0   UIKit   -[UINavigationController topViewController]
20  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.492   0   UIKit   -[UINavigationController topViewController]
21  0x14532980  MyPopUpViewController   Retain  11  00:10.672.796   0   UIKit   -[UINavigationController topViewController]
22  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.797   0   UIKit   -[UINavigationController topViewController]
23  0x14532980  MyPopUpViewController   Retain  12  00:10.672.801   0   UIKit   -[UINavigationController topViewController]
24  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.802   0   UIKit   -[UINavigationController topViewController]
25  0x14532980  MyPopUpViewController   Retain  13  00:10.672.804   0   UIKit   -[UINavigationController topViewController]
26  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.804   0   UIKit   -[UINavigationController topViewController]
27  0x14532980  MyPopUpViewController   Retain  14  00:10.672.829   0   UIKit   -[UINavigationController topViewController]
28  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.830   0   UIKit   -[UINavigationController topViewController]
29  0x14532980  MyPopUpViewController   Retain  15  00:10.672.830   0   UIKit   -[UINavigationController topViewController]
30  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.672.832   0   UIKit   -[UINavigationController topViewController]
31  0x14532980  MyPopUpViewController   Retain  16  00:10.686.674   0   UIKit   -[UINib instantiateWithOwner:options:]
32  0x14532980  MyPopUpViewController   Retain  17  00:10.686.696   0   UIKit   +[UIProxyObject addMappingFromIdentifier:toObject:forCoder:]
33  0x14532980  MyPopUpViewController   Retain  18  00:10.687.241   0   UIKit   -[UIProxyObject initWithCoder:]
34  0x14532980  MyPopUpViewController   Retain  19  00:10.687.244   0   UIKit   -[UIRuntimeConnection initWithCoder:]
35  0x14532980  MyPopUpViewController   Retain  20  00:10.687.254   0   UIKit   -[UIRuntimeConnection initWithCoder:]
36  0x14532980  MyPopUpViewController   Retain  21  00:10.687.261   0   UIKit   -[UIRuntimeConnection initWithCoder:]
37  0x14532980  MyPopUpViewController   Retain  22  00:10.687.270   0   UIKit   -[UIRuntimeConnection initWithCoder:]
38  0x14532980  MyPopUpViewController   Retain  23  00:10.689.785   0   UIKit   UINibDecoderDecodeObjectForValue
39  0x14532980  MyPopUpViewController   Retain  24  00:10.689.806   0   UIKit   UINibDecoderDecodeObjectForValue
40  0x14532980  MyPopUpViewController   Release 23  00:10.690.037   0   UIKit   -[UINib instantiateWithOwner:options:]
41  0x14532980  MyPopUpViewController   Release 22  00:10.690.056   0   UIKit   +[UIProxyObject removeMappingsForCoder:]
42  0x14532980  MyPopUpViewController   Release 21  00:10.690.086   0   UIKit   -[UINibDecoder finishDecoding]
43  0x14532980  MyPopUpViewController   Release 20  00:10.690.117   0   UIKit   -[UINibDecoder finishDecoding]
44  0x14532980  MyPopUpViewController   Release 19  00:10.690.124   0   UIKit   -[UIRuntimeConnection dealloc]
45  0x14532980  MyPopUpViewController   Release 18  00:10.690.134   0   UIKit   -[UIRuntimeConnection dealloc]
46  0x14532980  MyPopUpViewController   Release 17  00:10.690.155   0   UIKit   -[UINibDecoder finishDecoding]
47  0x14532980  MyPopUpViewController   Release 16  00:10.690.166   0   UIKit   -[UIRuntimeConnection dealloc]
48  0x14532980  MyPopUpViewController   Release 15  00:10.690.174   0   UIKit   -[UIRuntimeConnection dealloc]
49  0x14532980  MyPopUpViewController   Retain  16  00:10.690.494   0   UIKit   -[UINavigationController topViewController]
50  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.497   0   UIKit   -[UINavigationController topViewController]
51  0x14532980  MyPopUpViewController   Retain  17  00:10.690.510   0   UIKit   -[UINavigationController topViewController]
52  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.511   0   UIKit   -[UINavigationController topViewController]
53  0x14532980  MyPopUpViewController   Retain  18  00:10.690.521   0   UIKit   -[UINavigationController topViewController]
54  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.690.522   0   UIKit   -[UINavigationController topViewController]
55  0x14532980  MyPopUpViewController   Retain  19  00:10.695.693   0   UIKit   -[UINavigationController topViewController]
56  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.695.693   0   UIKit   -[UINavigationController topViewController]
57  0x14532980  MyPopUpViewController   Retain  20  00:10.695.704   0   UIKit   -[UINavigationController _startTransition:fromViewController:toViewController:]
58  0x14532980  MyPopUpViewController   Release 19  00:10.695.721   0   UIKit   -[UINavigationController _startTransition:fromViewController:toViewController:]
59  0x14532980  MyPopUpViewController   Retain  20  00:10.701.163   0   UIKit   -[UINavigationController topViewController]
60  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.164   0   UIKit   -[UINavigationController topViewController]
61  0x14532980  MyPopUpViewController   Retain  21  00:10.701.212   0   UIKit   -[UIResponder becomeFirstResponder]
62  0x14532980  MyPopUpViewController   Release 20  00:10.701.235   0   UIKit   -[UIResponder becomeFirstResponder]
63  0x14532980  MyPopUpViewController   Retain  21  00:10.701.302   0   UIKit   -[UINavigationController topViewController]
64  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.302   0   UIKit   -[UINavigationController topViewController]
65  0x14532980  MyPopUpViewController   Retain  22  00:10.701.304   0   UIKit   -[UINavigationController topViewController]
66  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.304   0   UIKit   -[UINavigationController topViewController]
67  0x14532980  MyPopUpViewController   Retain  23  00:10.701.342   0   UIKit   -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
68  0x14532980  MyPopUpViewController   Release 22  00:10.701.356   0   UIKit   -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
69  0x14532980  MyPopUpViewController   Retain  23  00:10.701.386   0   UIKit   -[UINavigationController topViewController]
70  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.701.387   0   UIKit   -[UINavigationController topViewController]
71  0x14532980  MyPopUpViewController   Retain  24  00:10.701.399   0   UIKit   -[UIResponder becomeFirstResponder]
72  0x14532980  MyPopUpViewController   Release 23  00:10.701.414   0   UIKit   -[UIResponder becomeFirstResponder]
73  0x14532980  MyPopUpViewController   Release 22  00:10.701.762   0   GraphicsServices    GSEventRunModal
74  0x14532980  MyPopUpViewController   Release 21  00:10.701.774   0   GraphicsServices    GSEventRunModal
75  0x14532980  MyPopUpViewController   Release 20  00:10.701.775   0   GraphicsServices    GSEventRunModal
76  0x14532980  MyPopUpViewController   Release 19  00:10.701.809   0   GraphicsServices    GSEventRunModal
77  0x14532980  MyPopUpViewController   Release 18  00:10.701.821   0   GraphicsServices    GSEventRunModal
78  0x14532980  MyPopUpViewController   Release 17  00:10.701.943   0   GraphicsServices    GSEventRunModal
79  0x14532980  MyPopUpViewController   Release 16  00:10.701.945   0   GraphicsServices    GSEventRunModal
80  0x14532980  MyPopUpViewController   Release 15  00:10.701.947   0   GraphicsServices    GSEventRunModal
81  0x14532980  MyPopUpViewController   Release 14  00:10.701.985   0   GraphicsServices    GSEventRunModal
82  0x14532980  MyPopUpViewController   Release 13  00:10.701.985   0   GraphicsServices    GSEventRunModal
83  0x14532980  MyPopUpViewController   Release 12  00:10.701.989   0   GraphicsServices    GSEventRunModal
84  0x14532980  MyPopUpViewController   Release 11  00:10.701.989   0   GraphicsServices    GSEventRunModal
85  0x14532980  MyPopUpViewController   Release 10  00:10.701.990   0   GraphicsServices    GSEventRunModal
86  0x14532980  MyPopUpViewController   Release 9   00:10.702.017   0   GraphicsServices    GSEventRunModal
87  0x14532980  MyPopUpViewController   Release 8   00:10.702.018   0   GraphicsServices    GSEventRunModal
88  0x14532980  MyPopUpViewController   Release 7   00:10.702.039   0   GraphicsServices    GSEventRunModal
89  0x14532980  MyPopUpViewController   Release 6   00:10.702.040   0   GraphicsServices    GSEventRunModal
90  0x14532980  MyPopUpViewController   Release 5   00:10.702.041   0   GraphicsServices    GSEventRunModal
91  0x14532980  MyPopUpViewController   Release 4   00:10.702.042   0   GraphicsServices    GSEventRunModal
92  0x14532980  MyPopUpViewController   Release 3   00:10.702.051   0   GraphicsServices    GSEventRunModal
93  0x14532980  MyPopUpViewController   Release 2   00:10.702.052   0   GraphicsServices    GSEventRunModal
94  0x14532980  MyPopUpViewController   Release 1   00:10.702.096   0   GraphicsServices    GSEventRunModal
95  0x14532980  MyPopUpViewController   Retain  2   00:10.702.195   0   UIKit   -[UINavigationController topViewController]
96  0x14532980  MyPopUpViewController   Autorelease <null>  00:10.702.196   0   UIKit   -[UINavigationController topViewController]
97  0x14532980  MyPopUpViewController   Release 1   00:10.709.439   0   QuartzCore  CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*)
98  0x14532980  MyPopUpViewController   Retain  2   00:11.110.856   0   UIKit   -[UINavigationController topViewController]
99  0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.856   0   UIKit   -[UINavigationController topViewController]
100 0x14532980  MyPopUpViewController   Retain  3   00:11.110.858   0   UIKit   -[UINavigationController topViewController]
101 0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.859   0   UIKit   -[UINavigationController topViewController]
102 0x14532980  MyPopUpViewController   Retain  4   00:11.110.924   0   UIKit   -[UINavigationController topViewController]
103 0x14532980  MyPopUpViewController   Autorelease <null>  00:11.110.925   0   UIKit   -[UINavigationController topViewController]
104 0x14532980  MyPopUpViewController   Release 3   00:11.111.052   0   GraphicsServices    GSEventRunModal
105 0x14532980  MyPopUpViewController   Release 2   00:11.111.053   0   GraphicsServices    GSEventRunModal
106 0x14532980  MyPopUpViewController   Release 1   00:11.111.054   0   GraphicsServices    GSEventRunModal
107 0x14532980  MyPopUpViewController   Retain  2   00:12.862.301   0   UIKit   -[UINavigationController topViewController]
108 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.303   0   UIKit   -[UINavigationController topViewController]
109 0x14532980  MyPopUpViewController   Retain  3   00:12.862.304   0   UIKit   -[UINavigationController topViewController]
110 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.305   0   UIKit   -[UINavigationController topViewController]
111 0x14532980  MyPopUpViewController   Retain  4   00:12.862.370   0   UIKit   -[UINavigationController topViewController]
112 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.371   0   UIKit   -[UINavigationController topViewController]
113 0x14532980  MyPopUpViewController   Retain  5   00:12.862.373   0   UIKit   -[UINavigationController visibleViewController]
114 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.374   0   UIKit   -[UINavigationController visibleViewController]
115 0x14532980  MyPopUpViewController   Retain  6   00:12.862.376   0   UIKit   -[UINavigationController visibleViewController]
116 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.377   0   UIKit   -[UINavigationController visibleViewController]
117 0x14532980  MyPopUpViewController   Retain  7   00:12.862.774   0   UIKit   -[UINavigationController topViewController]
118 0x14532980  MyPopUpViewController   Autorelease <null>  00:12.862.776   0   UIKit   -[UINavigationController topViewController]
119 0x14532980  MyPopUpViewController   Release 6   00:12.877.586   0   Foundation  -[NSAutoreleasePool release]
120 0x14532980  MyPopUpViewController   Release 5   00:12.877.604   0   Foundation  -[NSAutoreleasePool release]
121 0x14532980  MyPopUpViewController   Release 4   00:12.877.604   0   Foundation  -[NSAutoreleasePool release]
122 0x14532980  MyPopUpViewController   Release 3   00:12.877.605   0   Foundation  -[NSAutoreleasePool release]
123 0x14532980  MyPopUpViewController   Release 2   00:12.877.610   0   Foundation  -[NSAutoreleasePool release]
124 0x14532980  MyPopUpViewController   Release 1   00:12.877.611   0   Foundation  -[NSAutoreleasePool release]
125 0x14532980  MyPopUpViewController   Retain  2   00:13.292.620   0   UIKit   -[UINavigationController topViewController]
126 0x14532980  MyPopUpViewController   Autorelease <null>  00:13.292.621   0   UIKit   -[UINavigationController topViewController]
127 0x14532980  MyPopUpViewController   Release 1   00:13.292.700   0   UIKit   -[UIViewController dealloc]
128 0x14532980  MyPopUpViewController   Release 0   00:13.292.853   0   GraphicsServices    GSEventRunModal
129 0x14532980  MyPopUpViewController   Zombie  -1  00:13.439.920   0   UIKit   -[UIPickerView _sendSelectionChangedForComponent:]

1 Ответ

0 голосов
/ 26 марта 2012

Может ли зомби быть каким-то объектом, которым вы управляете внутри MyPopUpViewController?Я замечаю, что сообщение об ошибке зомби относится к [UIPickerView _sendSelectionChangedForComponent:].Интересно, какое это имеет отношение к контроллеру?

Одна из возможностей состоит в том, что UIPicker пытается отправить сообщение своему делегату (я полагаю, ваш контроллер) после модал уволен.Один из способов исправить это - установить для свойства UIPicker delegate значение nil в методе release вашего контроллера.Пожалуйста, попробуйте это;Я надеюсь, что это помогает ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...