2012-03-26 9 views
1

Ich habe einen neugierigen Zombie-Bug, der in einer langjährigen App aus dem Holzwerk geschlichen zu sein scheint. Ich mag es zu denken, dass ich weiß, was ich tue, und Zombies sind normalerweise einfach zu reparieren, aber dieser hat mich verwirrt.presentModalViewController resultierend in mysteriösen Zombies

Instruments meldet, dass das Zombie-Objekt eine Ansicht ist, die ich als modale Ansicht präsentiere (MyPopUpViewController). Hier ist der Code, der den Modal-View-Controller darstellt.

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

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

[popUpViewController release]; 

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

       [navigationController release]; 

Innerhalb MyPopUpViewConroller, wenn die ‚Fertig‘ Benutzer Hähne auf der Navigationsleiste wird der modale View-Controller entlassen - Standard-Sachen und arbeiten 99 von 100 mal (oder mehr).

Wenn ich jedoch schnell in den modalen Dialog rein und raus gehe, und nur auf dem Simulator (den ich gesehen habe), bekomme ich den Zombie gemeldet unten.

Nun glaube ich, dass wenn ich MyPopUpViewController auf den Navigationscontroller drücke, wird es vom Navigationscontroller behalten, so dass ich sicher bin, es zu veröffentlichen. Ebenso behält der tabBarController den Navigationscontroller bei, also kann ich ihn auch sicher freigeben, wie im Code gezeigt.

Von den Instrumenten-Diagnosen sind dies meine einzigen Retain/Releases von MyPopUpViewController (siehe Verweise auf 'myapp' in der Spalte 'Verantwortlich'), und es sind die Interna von iOS, die später den Zombie [anscheinend?]

Ich würde mich über Vorschläge freuen, warum ich diesen Zombie sehe. Vielen Dank.

# 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:] 

Antwort

0

Könnte der Zombie ein Objekt sein, das Sie innerhalb von MyPopUpViewController verwalten? Ich stelle fest, dass sich die Zombie-Fehlermeldung auf [UIPickerView _sendSelectionChangedForComponent:] bezieht. Ich frage mich, was das mit dem Controller zu tun hat?

Eine Möglichkeit besteht darin, dass die UIPicker versucht, eine Nachricht an seinen Delegierten zu schicken (ich nehme an, Ihr Controller) nach der modalen Feldes verwiesen. Eine Möglichkeit, dies zu beheben, wäre, die UIPickerdelegate Eigenschaft auf nil in der release Methode Ihres Controllers zu setzen. Bitte, probiere es aus. Ich hoffe es hilft ....

+0

Danke für Ihre Antwort. Ja, die modale Ansicht präsentiert einen Picker - würde die Zombie-Diagnose das höhere Objekt melden? – Snips

+0

bitte, siehe meine Bearbeitung ... – sergio

+0

Vielen Dank für Ihre zusätzliche Bearbeitung in Bezug auf den Anruf an den Delegierten, ich hatte den Code nach Ihrem ersten Kommentar untersucht und war zu der gleichen Schlussfolgerung gekommen, und die gleiche vorgeschlagene Lösung, und testen ist derzeit im Gange - das war immer ein schwieriger Bug zu provozieren, aber ich habe das Problem seit diesem Update nicht gesehen. Ich denke, das ist ziemlich subtil, aber passt zu den Beweisen (Timingunterschiede auf Simulator vs. iPhone etc.). Danke für Ihre Hilfe. – Snips